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

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

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


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

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

当前回答

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

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表达式的解决方案似乎对较小的输入执行得更好。

其他回答

如果你只需要知道一个带有最大值的键,你可以不使用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变量,作为指向父作用域中定义的变量值的指针。

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

更容易理解的方法:

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

根据所选答案中的注释迭代解决方案…

在Python 3中:

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

在Python 2中:

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

我对这些答案都不满意。Max总是选择第一个具有Max值的键。字典可以有多个具有该值的键。

def keys_with_top_values(my_dict):
    return [key  for (key, value) in my_dict.items() if value == max(my_dict.values())]

把这个答案贴出来,希望能帮助到别人。 请看下面的SO帖子

在平局的情况下,Python会选择哪个最大值?