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

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

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


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

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

当前回答

如果你只需要知道一个带有最大值的键,你可以不使用iterkeys或iteritems,因为在Python中迭代字典就是迭代它的键。

max_key = max(stats, key=lambda k: stats[k])

编辑:

来自评论,@user1274878:

我不熟悉python。你能分步骤解释一下你的答案吗?

是的……

max

马克斯(iterable(关键)) Max (arg1, arg2, *args[, key]) 返回可迭代对象中最大的项或两个或多个参数中最大的项。

可选参数key描述了如何比较元素以获得它们之间的最大值:

lambda <item>: return <a result of operation with item> 

返回值将进行比较。

Dict

Python dict是一个哈希表。dict的键是声明为键的对象的哈希值。由于性能原因,迭代通过字典实现迭代通过它的键。

因此,我们可以用它来消除获取键列表的操作。

关闭

定义在另一个函数内部的函数称为嵌套函数。嵌套函数可以访问封闭范围的变量。

通过lambda函数的__closure__属性可用的stats变量,作为指向父作用域中定义的变量值的指针。

其他回答

下面是两种简单的方法从给定的字典中提取键的最大值

import time
stats = {
   "a" : 1000,
   "b" : 3000,
   "c" : 90,
   "d" : 74,
   "e" : 72,
 }

start_time = time.time_ns()
max_key = max(stats, key = stats.get)
print("Max Key [", max_key, "]Time taken (ns)", time.time_ns() - start_time)

start_time = time.time_ns()
max_key = max(stats, key=lambda key: stats[key])
print("Max Key with Lambda[", max_key, "]Time taken (ns)", time.time_ns() - start_time)

输出

Max Key [ b ] Time taken (ns) 3100
Max Key with Lambda [ b ] Time taken (ns) 1782

使用Lambda表达式的解决方案似乎对较小的输入执行得更好。

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

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

要获得字典统计的最大键/值:

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

基于密钥

>>> max(stats.items(), key = lambda x: x[0]) (' c ', 100)

基于价值观

>>> max(stats.items(), key = lambda x: x[1]) (" b ", 3000)

当然,如果您只想从结果中获得键或值,则可以使用元组索引。例如,获取与最大值对应的键:

>>> max(stats.items(), key = lambda x: x[1])[0] “b”

解释

Python 3中的字典方法items()返回字典的视图对象。当这个视图对象被max函数遍历时,它会以(key, value)形式的元组生成字典项。

> > >列表(stats.items ()) [('c', 100), ('b', 3000), ('a', 1000)]

当您使用lambda表达式lambda x: x[1]时,在每次迭代中,x是这些元组(键,值)之一。因此,通过选择正确的索引,您可以选择是通过键还是通过值进行比较。

Python 2

对于Python 2.2+版本,同样的代码也可以工作。但是,为了提高性能,最好使用iteritems()字典方法而不是items()。

笔记

这个答案是基于Climbs_lika_Spyder的回答上的评论。 使用的代码在Python 3.5.2和Python 2.7.10上进行了测试。

例子:

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

如果你想用它的键找到Max值,也许下面的步骤很简单,不需要任何相关的函数。

max(stats, key=stats.get)

输出是具有Max值的键。

与集合。你可以这样做

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