Zethex a écrit :
At the moment i'm doing a piece of work for school and I'm stuck at the
moment.
I have a list of words, for example:
Sentence = ['A', 'dog', 'walked', 'across', 'the', 'street']
<ot>
Naming convention : variable names are all_lower, so s/Sentence/sentence/
</ot>
>
I have another list which I need to use to replace certain words, and its in
the form of:
synonyms = [
[canine, [dog, puppy, bulldog]],
[ road, [street, avenue, court]]
]
NB : I assume this is :
synonyms = [
['canine', ['dog', 'puppy', 'bulldog']],
[ 'road', ['street', 'avenue', 'court']],
]
and FWIW, I'd use a list of tuples, not a list of lists:
synonyms = [
('canine', ['dog', 'puppy', 'bulldog']),
('road', ['street', 'avenue', 'court']),
]
or even better a dict:
synonyms = {
'canine' : ['dog', 'puppy', 'bulldog'],
'road' : ['street', 'avenue', 'court'],
}
What the procedure must do is replace dog with canine, and street with road.
Therefore if a word is in the sentence and appears on the right side of the
list entry, replace it with the left entry.
I can't seem to find a help file with what I'm after.
This is probably not something that you'll find in any 'help file'. As
for almost everything algorithmic, the key is to have the appropriate
data structure. In this case, the appropriate data structure is
obviously a reversed index of the synonyms dict (assuming there is no
duplicate word in the synonyms lists):
reversed_synomyms = dict()
for key, values in synonyms.items():
for word in values:
reversed_synonyms[word] = key
print reversed_synonyms
={'court': 'road', 'bulldog': 'canine', 'dog': 'canine', 'street':
'road', 'puppy': 'canine', 'avenue': 'road'}
From then, the replacement procedure is quite obvious:
solution = [reversed_synonyms.get(word, word) for word in sentence]
print solution
=['A', 'canine', 'walked', 'across', 'the', 'road']
HTH