从词典列表中返回最大的字典总和

时间:2017-01-06 21:29:59

标签: python python-2.7 list dictionary

给定一个词典列表,如何返回具有最大总和的词典

>>>testing
[{'key1': 1, 'key2': 14, 'key3': 47},
 {'key1': 222, 'key2': 222, 'key3': 222},
  {'key1': 0, 'key2': 0, 'key3': 0}]

我想要回复

{'key1': 222, 'key2': 222, 'key3': 222}

到目前为止,我已尝试[sum(i.itervalues()) for i in testing],它会告诉我列表中的哪些项目具有最大价值,但我对如何返回列表感到迷茫。我使用的是Python 2.7 fwiw。

2 个答案:

答案 0 :(得分:4)

您只需将max与参数化key

一起使用即可
result = max(testing,key=lambda x : sum(x.itervalues()))
带有max(..)

key会根据给定的iterable函数返回给定key的最大值。

使用python运行此操作会发出:

$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> testing = [{'key1': 1, 'key2': 14, 'key3': 47},{'key1': 222, 'key2': 222, 'key3': 222},{'key1': 0, 'key2': 0, 'key3': 0}]
>>> max(testing,key=lambda x : sum(x.itervalues()))
{'key3': 222, 'key2': 222, 'key1': 222}

答案 1 :(得分:2)

您也可以使用max()嵌套 dict comprehension 表达式来实现它:

#         assuming the keys in all the sub-lists are same  v
>>> {key: max(d[key] for d in testing) for key in testing[0].keys()}
{'key3': 222, 'key2': 222, 'key1': 222}