根据键和列表元素的匹配添加字典的值

时间:2019-07-16 12:17:14

标签: arrays python-3.x dictionary

我的字典清单如下:

[{
 '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}

2 个答案:

答案 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得到了您的预期输出。