[英]add values of dictionary based of matching of keys and list elements
我有一個字典列表:
[{
'doc1': {'hyundai': 12,
'mercedez': 34,
'bugatti': 2,
'honda': 19},
'doc2': {'tennis': 20,
'wimbledon': 11,
'nadal': 57},
'doc3':{'world': ,
'politics': 8,
'obama': 7,
'america': 4,
'summit': 14,
'budget': 17,
'germany': 22
}}]
和單詞列表l= ['trump','mercedez','wimbledon','nadal','hyundai','tennis']
我只想將列表元素與字典的鍵匹配,並獲得其值的總和,並與最高總和一起排序,如果沒有元素匹配,則相應鍵的總和將為零。
預計為,
new_dict={'doc2':88,'doc1':46,'doc3'=0}
您可以使用.items()
進行迭代,
然后以相同的方式迭代內部字典。
像這樣:
d_list = [{'doc1': {'hyundai': 12,
'mercedez': 34,
'bugatti': 2,
'honda': 19},
'doc2': {'tennis': 20,
'wimbledon': 11,
'nadal': 57},
'doc3': {'world': 0,
'politics': 8,
'obama': 7,
'america': 4,
'summit': 14,
'budget': 17,
'germany': 22}}]
l = ['trump', 'mercedez', 'wimbledon', 'nadal', 'hyundai', 'tennis']
result_d = {}
for doc_name, inner_dict in d_list[0].items():
result_d[doc_name] = sum(v for k,v in inner_dict.items() if k in l)
new_list = [result_d]
print(new_list)
輸出:
[{'doc1': 46, 'doc2': 88, 'doc3': 0}]
嘗試這個,
In [131]: A = [{'doc1': {'hyundai': 12, 'mercedez': 34, 'bugatti': 2, 'honda': 19},
...: 'doc2': {'tennis': 20, 'wimbledon': 11, 'nadal': 57},
...: 'doc3': {'world': 0, 'politics': 8, 'obama': 7, 'america': 4, 'summit': 14, 'budget': 17, 'germany': 22}}]
In [132]: B = ['trump', 'mercedez', 'wimbledon', 'nadal', 'hyundai', 'tennis']
In [133]: dict_comprehension = {key: sum([value.get(b, 0) for b in B]) for key, value in A[0].items()}
In [134]: result = dict(sorted(dict_comprehension.items(), key=lambda x: x[1], reverse=True))
In [135]: result
Out[135]: {'doc2': 88, 'doc1': 46, 'doc3': 0}
我使用dict comprehensions
得到了您的預期輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.