我有一个字典,其中键是字符串,值是整数。
stats = {'a': 1, 'b': 3000, 'c': 0}
如何获得具有最大值的键?在这种情况下,它是'b'。
有没有比使用带有反向键值元组的中间列表更好的方法?
inverse = [(value, key) for key, value in stats.items()]
print(max(inverse)[1])
我有一个字典,其中键是字符串,值是整数。
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表达式的解决方案似乎对较小的输入执行得更好。
其他回答
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]]
要获得字典统计的最大键/值:
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上进行了测试。
max(stats, key=stats.get, default=None)
如果stats可以是一个空字典,则只使用max(stats, key=stats.get)将引发ValueError。
这个答案是安全的,只要在字典中不是一个可能的键。
我在这里寻找如何根据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']