在python中使用key和lambda查找max

时间:2017-10-27 00:17:11

标签: python python-2.7 dictionary lambda

我在python中创建了一个dict,想找到最大值。我用key = anonymous函数试验了max。我当然实现了错误,但不知何故代码运行了,我最终得到了一个键的输出,这对我来说根本没有意义。请问有人请向我解释为什么它有效以及如何运作?谢谢。

Q['state1']={'zone':20,'left':50,'right':89,'forward':34}
qmax=max(Q['state1'],key=lambda x: x[1]) %this returns 'forward'
qmax=max(Q['state1'],key=lambda x: x[0]) %this returns 'zone'

2 个答案:

答案 0 :(得分:2)

如果你将字典传递给max,它会遍历字典 keys (这里是一个字符串列表),因为你已经指定了一个比较器函数,比较现在在x[1](在第一行)完成,恰好是每个键的第二个字符,而x[0](在第二行)恰好是每个键的第一个字符。

因此,例如,您有一个键列表:

['forward', 'zone', 'right', 'left']  

请注意,此列表可以按任何顺序返回,因为词典没有排序。现在,选择最大值的基础是第二个字符,因此您可以选择:

['f o rward', 'z o ne', 'r i ght', 'l e ft'] 

恰好,对于你的CPython实现,在forward之前返回zone(尽管可以返回任何一个,具体取决于从字典返回键的顺序)

答案 1 :(得分:1)

您正在迭代(字符串)键并在lambda中对它们编制索引,以便从键中的特定字母生成排序键,而不是迭代键/值对并使用其中任何一个的排序键{ {1}}键或值。我猜您打算根据dict密钥或值找到max,在这种情况下,您想要拨打dict(或避免临时Py2.7 .items()):

.viewitems()

或者,如果您根本不需要配对,请跳过max(Q['state1'].viewitems(), key=lambda x: x[1]) # gets ('right', 89) max(Q['state1'].viewitems(), key=lambda x: x[0]) # gets ('zone', 20) ,直接迭代您关注的内容:

key