TypeError: unorderable types: dict() < dict() in heapq

TypeError: unorderable types: dict() < dict() in heapq

我正在移植适用于 python2 的代码。在移植它时,我在下面的行

上收到错误 unorderable types: dict() < dict()
heapq.heappush(colors, color) #this throws error
return heapq.nsmallest(count, colors, key=lambda k: k['shade'])

这些是类型:

`colors` is a <class 'list'>
`color` is a <class 'dict'>

如何在 python3 中完成这项工作?

如果您希望词典可订购,则不能使用常规类型。但是,您可以使用(不可变的)frozendicts。参见 https://github.com/slezica/python-frozendict

仅将 frozendict 放入您的列表中,一切都应该正常工作。

你根本不需要在这里调用 heapppush,因为 nsmallest 已经处理了堆排序。它在内部创建一个堆并在其上推送项目。 nsmallest 本身不需要可订购的字典,因为您指定了 key 参数。

只需将 heappush 调用替换为 colors.append(color)

请注意,尽管您的代码在 Python 2 中有效,但它所做的只是在调用 nsmallest.

之前以任意顺序重新排列 colors 列表