I am trying to write a program that can merge two dictionaries (TEXT FILES!). These dictionaries consist of nouns and verbs that have been indexed from different corpora by another program (and then put into a text file). This is the form of these dictionaries:
dict1 = {'strawberry': [['eat', 1]], 'family-member': [['look up', 1]], 'mall': [['search', 1]]}
dict2 = {'strawberry': [['eat', 1]], 'family-member': [['lose', 1]], 'ovation': [['receive', 1]], 'mall': [['build', 1]]}
As you can see, they're dictionaries, with keys, that have lists in lists for values.
Now I'm trying to get the output like this:
finaldict = {'strawberry': [['eat', 2]], 'family-member': [['look up', 1]['lose',1]], 'mall': [['search', 1]['build', 1]], 'ovation': [['receive', 1]]
Until now, I have been able to merge dict1 and dict2 like this (in a string):
{'strawberry': [['eat', 1]], 'family-member': [['look up', 1]], 'mall': [['search',
1]], 'strawberry': [['eat', 1]], 'family-member': [['lose', 1]], 'ovation':
[['receive', 1]], 'mall': [['build', 1]]}
I convert this string as a dictionary with the next statement:
finaldict = eval(str1)
it turns the whole thing into a dictionary, it also says so when I ask for the type of finaldict, but it won't see the statements like [['eat', 1]] as values or anything. I need this so I can loop over every item and count how many times it appears with which verb.
解决方案from collections import Counter
dict1 = {'strawberry': [['eat', 1]], 'family-member': [['look up', 1]], 'mall': [['search', 1]]}
dict2 = {'strawberry': [['eat', 1]], 'family-member': [['lose', 1]], 'ovation': [['receive', 1]], 'mall': [['build', 1]]}
result = {k: Counter(dict(v)) for k, v in dict1.items()}
for k, v in dict2.items():
result.setdefault(k, Counter()).update(dict(v))
result = {k: [list(x) for x in v.items()] for k, v in result.items()}