簡體   English   中英

Python:將字典與列表中的列表合並為值並對其進行計數

[英]Python: merging dictionaries with lists in lists as values and counting them

我正在嘗試編寫一個可以合並兩個字典(TEXT FILES!)的程序。 這些詞典由名詞和動詞組成,這些名詞和動詞已由另一個程序從不同的語料庫中索引(然后放入文本文件中)。 這是這些字典的形式:

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

如您所見,它們是帶有鍵的字典,在值列表中具有列表。 現在,我試圖獲得如下輸出:

finaldict = {'strawberry': [['eat', 2]], 'family-member': [['look up', 1]['lose',1]], 'mall': [['search', 1]['build', 1]], 'ovation': [['receive', 1]]

到目前為止,我已經能夠像這樣(在字符串中)合並dict1和dict2:

{'strawberry': [['eat', 1]], 'family-member': [['look up', 1]], 'mall': [['search',
1]], 'strawberry': [['eat', 1]], 'family-member': [['lose', 1]], 'ovation':
[['receive', 1]], 'mall': [['build', 1]]}

我使用下一條語句將該字符串轉換為字典:finaldict = eval(str1)它將整個內容轉換為字典,它也表示這樣,當我詢問finaldict的類型時,卻看不到[ ['eat',1]]作為值或其他任何值。 我需要這個,所以我可以遍歷每個項目並計算該動詞出現多少次。

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()}

沒有什么花哨的只是打破它。

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()]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM