簡體   English   中英

根據鍵和列表元素的匹配添加字典的值

[英]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.

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