user2962024
user2962024

Reputation: 317

Find and replace strings in a python dictionary

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.

Upvotes: 5

Views: 15740

Answers (2)

jramirez
jramirez

Reputation: 8685

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

Upvotes: -1

roippi
roippi

Reputation: 25954

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)

Upvotes: 5

Related Questions