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

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

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


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

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

当前回答

如果有一个以上的元素,我的值是最大的。我会列出所有值为最大值的键。

>>> stats = {'a':1000, 'b':3000, 'c': 100, 'd':3000}
>>> [key for m in [max(stats.values())] for key,val in stats.iteritems() if val == m]
['b', 'd']

这将给你'b'和任何其他最大键。

注意:对于python 3使用stats.items()而不是stats.iteritems()

其他回答

max(stats, key=stats.get)

我在这里寻找如何根据mydict.values()的值返回mydict.keys()。我不是只返回一个键,而是返回前x个值。

这个解决方案比使用max()函数更简单,你可以很容易地改变返回值的数量:

stats = {'a':1000, 'b':3000, 'c': 100}

x = sorted(stats, key=(lambda key:stats[key]), reverse=True)
['b', 'a', 'c']

如果你想要一个排名最高的键,只需使用索引:

x[0]
['b']

如果你想要前两个排名最高的键,只需使用列表切片:

x[:2]
['b', 'a']

这是另一个:

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

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

+1到@Aric Coady最简单的解决方案。 还有一种方法是随机选择字典中最大值的键之一:

stats = {'a':1000, 'b':3000, 'c': 100, 'd':3000}

import random
maxV = max(stats.values())
# Choice is one of the keys with max value
choice = random.choice([key for key, value in stats.items() if value == maxV])

更容易理解的方法:

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]]