我有一个字典,其中键是字符串,值是整数。

stats = {'a': 1, 'b': 3000, 'c': 0}

如何获得具有最大值的键?在这种情况下,它是'b'。


有没有比使用带有反向键值元组的中间列表更好的方法?

inverse = [(value, key) for key, value in stats.items()]
print(max(inverse)[1])

当前回答

max(stats, key=stats.get, default=None)

如果stats可以是一个空字典,则只使用max(stats, key=stats.get)将引发ValueError。

这个答案是安全的,只要在字典中不是一个可能的键。

其他回答

你可以使用运算符。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'

这是另一个:

stats = {'a':1000, 'b':3000, 'c': 100}
max(stats.iterkeys(), key=lambda k: stats[k])

函数键只是返回应该用于排序的值,max()立即返回所需的元素。

如何:

 max(zip(stats.keys(), stats.values()), key=lambda t : t[1])[0]

与集合。你可以这样做

>>> import collections
>>> stats = {'a':1000, 'b':3000, 'c': 100}
>>> stats = collections.Counter(stats)
>>> stats.most_common(1)
[('b', 3000)]

如果合适,可以从一个空集合开始。计数并加进去

>>> stats = collections.Counter()
>>> stats['a'] += 1
:
etc. 

试试这个:

sorted(dict_name, key=dict_name.__getitem__, reverse=True)[0]