Bit of List replacing trouble (newbie)

Z

Zethex

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']

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]]
]
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. I'm just wondering if
anyone can help me on the right track on how to start this procedure, maybe
not an answer but just a little help on how to get started as I'm complete
stuck right now.
 
P

Peter Otten

Zethex said:
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']

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]]
]
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. I'm just wondering
if anyone can help me on the right track on how to start this procedure,
maybe not an answer but just a little help on how to get started as I'm
complete stuck right now.

See if you can put the synonyms in a dict:

syndict = {"dog": "canine", "puppy": "canine", ..., "court": "road"}

The code to achieve that should consist of two nested loops.
You can then look up a word easily with

word = syndict.get(word, word)

Put that into another loop iterating over the words of the original sentence
and build the new sentence by appending to a fresh list.

Peter
 
B

Bruno Desthuilliers

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/
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,901
Latest member
Noble71S45

Latest Threads

Top