假设model
是defaultdict
,num
是set
>>> model
>>> defaultdict(<function <lambda> at 0x11076f758>, {1: 3, 2: 2, 4: 1})
>>> num
>>> {1, 2, 3, 4, 5, 6}
我想从
num
中具有最大值的model
中获取项目,下面的代码在Python2
中可以正常工作>>> # python 2.7.6
>>> max(num, key=model.get)
>>> 1
但这在
Python3
中不起作用,>>> # python 3.3.3
>>> max(num, key=model.get)
>>> TypeError: unorderable types: NoneType() > int()
我可以使用
max(num, key=lambda k:model[k])
使其在Python3
中起作用,但是如果num
中的项不在model
中,则将其添加。这将修改model
。我想知道为什么
model.get
在Python3
中不起作用,以及如何在不修改model
的情况下做到这一点。 最佳答案
使用key=lambda x: model.get(x, 0)
。
如果未找到该项目,则defaultdict.get
默认情况下返回None。 Python 2允许对不同类型进行有序比较(例如小于和大于),但Python 3不允许。当Python 3尝试找到最大值时,它将尝试查看一个键的值是否大于另一个键的值。如果值之一为“无”,则它将失败,并显示您看到的错误。解决方案是使键函数返回零而不是缺少值的无。