我有一个字典,其中键是字符串,值是整数。
stats = {'a': 1, 'b': 3000, 'c': 0}
如何获得具有最大值的键?在这种情况下,它是'b'。
有没有比使用带有反向键值元组的中间列表更好的方法?
inverse = [(value, key) for key, value in stats.items()]
print(max(inverse)[1])
我有一个字典,其中键是字符串,值是整数。
stats = {'a': 1, 'b': 3000, 'c': 0}
如何获得具有最大值的键?在这种情况下,它是'b'。
有没有比使用带有反向键值元组的中间列表更好的方法?
inverse = [(value, key) for key, value in stats.items()]
print(max(inverse)[1])
当前回答
你可以使用:
max(d, key=d.get)
# which is equivalent to
max(d, key=lambda k: d.get(k))
要返回键值对,使用:
max(d.items(), key=lambda k: k[1])
其他回答
你可以使用运算符。Itemgetter:
import operator
stats = {'a': 1000, 'b': 3000, 'c': 100}
max(stats.iteritems(), key=operator.itemgetter(1))[0]
并且使用stats.iteritems()而不是在内存中构建一个新的列表。max()函数的key参数是一个函数,它计算一个用于确定如何对项目排序的键。
请注意,如果你有另一个键值对'd': 3000,这个方法将只返回其中一个,即使它们都有最大值。
>>> import operator
>>> stats = {'a': 1000, 'b': 3000, 'c': 100, 'd': 3000}
>>> max(stats.iteritems(), key=operator.itemgetter(1))[0]
'b'
如果使用Python3:
>>> max(stats.items(), key=operator.itemgetter(1))[0]
'b'
更容易理解的方法:
mydict = { 'a':302, 'e':53, 'g':302, 'h':100 }
max_value_keys = [key for key in mydict.keys() if mydict[key] == max(mydict.values())]
print(max_value_keys) # prints a list of keys with max value
输出:['a', 'g']
现在你只能选择一个键:
maximum = mydict[max_value_keys[0]]
这是另一个:
stats = {'a':1000, 'b':3000, 'c': 100}
max(stats.iterkeys(), key=lambda k: stats[k])
函数键只是返回应该用于排序的值,max()立即返回所需的元素。
max(stats, key=stats.get, default=None)
如果stats可以是一个空字典,则只使用max(stats, key=stats.get)将引发ValueError。
这个答案是安全的,只要在字典中不是一个可能的键。
在这种情况下,你有多个具有相同值的键,例如:
stats = {'a':1000, 'b':3000, 'c': 100, 'd':3000, 'e':3000}
你可以得到一个包含所有最大值键的集合,如下所示:
from collections import defaultdict
from collections import OrderedDict
groupedByValue = defaultdict(list)
for key, value in sorted(stats.items()):
groupedByValue[value].append(key)
# {1000: ['a'], 3000: ['b', 'd', 'e'], 100: ['c']}
groupedByValue[max(groupedByValue)]
# ['b', 'd', 'e']