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

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

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


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

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

当前回答

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

其他回答

你可以使用运算符。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()立即返回所需的元素。

我在这里寻找如何根据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']
key, value = max(stats.iteritems(), key=lambda x:x[1])

如果你不关心价值(我会很惊讶,但是),你可以做:

key, _ = max(stats.iteritems(), key=lambda x:x[1])

我更喜欢元组解包,而不是表达式末尾的[0]下标。 我从来都不太喜欢lambda表达式的可读性,但我发现这个比operator.itemgetter(1)更好。

如何:

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