更喜欢字典中的最大值?

时间:2018-12-06 23:50:27

标签: python dictionary duplicates max

您可以通过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'

3 个答案:

答案 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类似。但是,您不必每次希望检索具有maxmin值的项时都依赖辅助字典,而是可以执行单一排序并利用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

由于OrderedDictdict的子类,因此通常无需转换为常规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))