密钥对应python字典中的最大值

时间:2011-03-08 01:21:54

标签: python

a = dict(((1,3),(0,-1),(3,21)))
m = max(a, key=a.get)

有人可以解释为什么这会返回与最大值对应的键吗?它困扰了我很长一段时间。谢谢!

2 个答案:

答案 0 :(得分:23)

字典“a”是python中的可迭代结构。当您使用for x in a进行循环时,您将循环遍历字典中的键。

在第二行中,max函数有两个参数:一个可迭代对象(a)和一个可选的“key”函数。 Key函数将用于评估a中最大的项目的值。

示例:

>>> a = dict(((1,3),(0,-1),(3,21)))
>>> for x in a:
...     print x #output the value of each item in our iteration
... 
0
1
3

请注意,仅输出“键”。当我们将这些键中的每一个传递给“get”时......

>>> a.get(0)
-1
>>> a.get(1)
3
>>> a.get(3)
21

我们获得每个键的值。现在看看max的工作原理。

>>> b=[2, 3, 5, 6, 4]
>>> max(b)
6
>>> def inverse(x):
...     return 1.0 / x
... 
>>> max(b, key=inverse)
2

如您所见,max(默认情况下)只会找到可迭代列表中的最大数字。如果我们定义“逆”函数,它将返回b中inverse(item)最大的最大项。

合并这两项,我们发现max(a, key=a.get)将返回itema的{​​{1}},a.get(item)的值最大。即对应于最大值的密钥。

答案 1 :(得分:1)

您是否在询问key参数的工作原理?它需要一个可调用的,它适用于字典中的每个元素。对于你的字典,它只是这样做:

a.get(1)  # 3
a.get(0)  # -1
a.get(3)  # 21

max然后使用键函数的结果作为比较值,因此显然会选择返回最高值的元素,即3。