a = dict(((1,3),(0,-1),(3,21)))
m = max(a, key=a.get)
有人能给我一个解释,为什么这会返回对应最大值的键?它困扰了我很长一段时间。谢谢!python字典中对应最大值的键
a = dict(((1,3),(0,-1),(3,21)))
m = max(a, key=a.get)
有人能给我一个解释,为什么这会返回对应最大值的键?它困扰了我很长一段时间。谢谢!python字典中对应最大值的键
字典“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
注意这里只有 “钥匙” 是输出。当我们将这些密钥中的每一个传递给“获得”时...
>>> 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)
将返回a
中的item
,其中值a.get(item)
是最大的。即对应于最大值的密钥。
你问的key
参数是如何工作的?它需要一个可调用的,它应用于字典中的每个元素。在你的字典的情况下,它只是做到这一点:
a.get(1) # 3
a.get(0) # -1
a.get(3) # 21
max
然后使用功能键作为比较值的结果,因此它显然会选择返回最高值的元素,即3
如果你真的感兴趣,你也可以尝试使用lambda函数:'max(a,key = lambda x:a [x])' – ProdigySim