在python中使用key和lambda查找max

2024-06-07 19:27:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经用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'

Tags: lambdakey函数zonethisleftdictmax
2条回答

如果您将字典传递给max,它将遍历字典(这里是一个字符串列表),并且由于您指定了一个比较函数,现在将对x[1](在第一行中)进行比较,这恰好是每个键的第二个字符,和x[0](在第二行)恰好是每个键的第一个字符。你知道吗

例如,您有一个键列表:

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

没有按顺序返回的注释,因为没有按顺序返回的词典。现在,选择最大值的基础是第2个字符,因此您可以根据以下条件进行选择:

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

碰巧的是,对于您的CPython实现,forwardzone之前返回(尽管其中任何一个都可以返回,这取决于从字典返回键的顺序)。你知道吗

您正在迭代(字符串)键并在lambda中对它们进行索引,以根据键中的特定字母生成排序键,而不是迭代键/值对,而是使用dict键或值的排序键。我猜您打算基于dict键或值来查找max,在这种情况下,您应该调用.items()(或者避免在Py2.7 .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,直接迭代您关心的内容:

max(Q['state1'].viewvalues())  # gets 89
max(Q['state1'])  # gets 'zone'

相关问题 更多 >

    热门问题