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()}
Nothing too fancy just break it out.
from collections import defaultdict
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]]}
keys = set(dict2.keys()).union(dict1.keys())
final = {}
for k in keys:
d1val = dict1.get(k, [])
d2val = dict2.get(k, [])
resd = defaultdict(lambda: 0)
for word, count in d1val:
resd[word] += count
for word, count in d2val:
resd[word] += count
final[k] = [list(i) for i in resd.items()]
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.