如何从列表中获取每个元素的最大值键是一个字典?

时间:2018-02-13 07:33:01

标签: python-3.x

我试图从列表中获取maximum value key,列表中的每个元素都是一个字典,如

li = [{'a': 100}, {'b': 200}, {'c': 50}]

是否可以在没有排序列表的情况下获取maximum value key?请帮我解决这个问题。

3 个答案:

答案 0 :(得分:1)

您可以通过访问每个元素并保存当前最大值来获得线性时间的最大值。 修改

人们已经写过这样做的pythonic方法。 非pythonic方式是写一个像这样的正常循环:

li = [{'a': 100}, {'b': 200}, {'c': 50}]

# if you know that all numbers are positive then just use max = 0
max = list(li[0].values())[0]

for values in li:    
    for value in values.values():
        if value > max:
           max = value

答案 1 :(得分:1)

max内置接受key参数,该参数可能与您想要的一样复杂:

max(li,key=lambda x: list(x.values())[0])

如果您的所有词典都有一个项目,那么只需获取所有值,然后检索第一个(也是唯一的)索引。在Python 2中注意values()会返回view,因此您必须在访问它之前将其转换为列表。

答案 2 :(得分:1)

这样也可以在你的词典中添加更多项目:

from itertools import chain
from operator import itemgetter
li = [{'a': 100}, {'b': 200}, {'c': 50}]
m = max(chain.from_iterable(item.items() for item in li), key=itemgetter(1))[0]
print(m)

即。如果您的列表看起来像这样,它也会起作用:

li = [{'a': 100}, {'b': 200, 'd': 50}, {'c': 50, 'e': 300, 'f': 20}]

你需要采取像

这样的边缘案例
li = [{'a': 100}, {'b': 100}]
考虑到了。答案应该是a还是b