我的字典清单如下:
[{
'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}
答案 0 :(得分:1)
您可以使用.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}]
答案 1 :(得分: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
得到了您的预期输出。