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

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()

其他回答

d = {'A': 4,'B':10}

min_v = min(zip(d.values(), d.keys()))
# min_v is (4,'A')

max_v = max(zip(d.values(), d.keys()))
# max_v is (10,'B')
max(stats, key=stats.get)

Max ((value, key) for key, value in stats.items())[1]

在这种情况下,你有多个具有相同值的键,例如:

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

我在这里寻找如何根据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']