假设modeldefaultdictnumset

>>> 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.getPython3中不起作用,以及如何在不修改model的情况下做到这一点。

最佳答案

使用key=lambda x: model.get(x, 0)

如果未找到该项目,则defaultdict.get默认情况下返回None。 Python 2允许对不同类型进行有序比较(例如小于和大于),但Python 3不允许。当Python 3尝试找到最大值时,它将尝试查看一个键的值是否大于另一个键的值。如果值之一为“无”,则它将失败,并显示您看到的错误。解决方案是使键函数返回零而不是缺少值的无。

10-07 21:07
查看更多