5

I have a dictionary that looks like:

d = {'alleged': ['truths', 'fiels', 'fact', 'infidelity', 'incident'],
 'greased': ['axle', 'wheel', 'wheels', 'fields', 'enGine', 'pizza'],
 'plowed': ['fields', 'field', 'field', 'incident', '', '']}

I would like to go over it and replace some items for another strings. The strings to be find and the ones to replace them are also in a dictionary, in which the key is the string to be found and the value is the string to replace it:

d_find_and_replace = {'wheels':'wheel', 'Field': 'field', 'animals':'plants'}

I tried to use a function like:

def replace_all(dic1, dic2):
    for i, j in dic.items():
        dic3 = dic1.replace(i, j)
    return(dic3)

but it won't work because obviously, it uses replace built-in function replace inside it, and it is not possible to use it for dictionaries. Any suggestions on how to do this? Thank you very much for any help.

Edited to correct spelling mistakes.

4

2 回答 2

5

Try just using direct assignation:

for key in d:
    li = d[key]
    for i,item in enumerate(li):
        li[i] = d_find_and_replace.get(item, item)
于 2013-11-13T18:36:00.180 回答
-1

here is a solution. I also fixed your dictionaries they were messy. Check your spelling because with those given keys I think there is only going to be one match that will be replaced. for example engine will never match enGine, unless you don't care to match lower or upper case, in that case you can use if val.lowercase()

d = {'alleged': ['truths', 'fiels', 'fact', 'infidelity', 'incident'],
     'greased': ['axle', 'wheel', 'wheels', 'fields', 'enGine', 'pizza'],
     'plowed': ['fields', 'field', 'field', 'incident', '', '']}

d_find_and_replace = {'fields': 'field', 'engine': 'engine', 'incidint':'incident'}

keys_replace = d_find_and_replace.keys()
print d
for key in d.keys():
    for i, val in enumerate(d[key], 0):
        if val in keys_replace:
            index_to_replace = keys_replace.index(val)
            d[key][i] = d_find_and_replace[keys_replace[index_to_replace]]

print d
于 2013-11-13T18:35:20.630 回答