您可以通过max(d,key = d.get)这样的方式在字典中获取具有最大值的密钥。 问题是两个或多个键达到最大时如何设置首选键。
我找到了一种方法,可以在键上加上数字。
有更好的方法吗?
In [56]: d = {'1a' : 5, '2b' : 1, '3c' : 5 }
In [57]: max(d, key=d.get)
Out[57]: '1a'
In [58]: d = {'4a' : 5, '2b' : 1, '3c' : 5 }
In [59]: max(d, key=d.get)
Out[59]: '3c'
答案 0 :(得分:3)
在key
参数中给定的函数可以返回一个元组。如果第一个元素有多个最大值,则将使用元组的第二个元素。这样,您就可以使用所需的方法,例如,使用两个字典:
d = {'a' : 5, 'b' : 1, 'c' : 5 }
d_preference = {'a': 1, 'b': 2, 'c': 3}
max(d, key=lambda key: (d[key], d_preference[key]))
# >> 'c'
d_preference = {'a': 3, 'b': 2, 'c': 1}
max(d, key=lambda key: (d[key], d_preference[key]))
# >> 'a'
答案 1 :(得分:1)
这与@AxelPuig's solution类似。但是,您不必每次希望检索具有max
或min
值的项时都依赖辅助字典,而是可以执行单一排序并利用collections.OrderedDict
:
from collections import OrderedDict
d = {'a' : 5, 'b' : 1, 'c' : 5 }
d_preference1 = {'a': 1, 'b': 2, 'c': 3}
d_preference2 = {'a': 3, 'b': 2, 'c': 1}
d1 = OrderedDict(sorted(d.items(), key=lambda x: -d_preference1[x[0]]))
d2 = OrderedDict(sorted(d.items(), key=lambda x: -d_preference2[x[0]]))
max(d1, key=d.get) # c
max(d2, key=d.get) # a
由于OrderedDict
是dict
的子类,因此通常无需转换为常规dict
。如果您使用的是Python 3.7+,则可以使用常规的dict
构造函数,因为dictionaries are insertion ordered。
如docs for max
所述:
如果多个项目最大,该函数将返回第一个
答案 2 :(得分:0)
@AxelPuig的答案略有不同。您可以在priorities
列表中固定键的顺序,并在key=d.get
中获得最大值。
d = {"1a": 5, "2b": 1, "3c": 5}
priorities = list(d.keys())
print(max(priorities, key=d.get))