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 中完成这项工作?
如果您希望词典可订购,则不能使用常规类型。但是,您可以使用(不可变的)frozendict
s。参见 https://github.com/slezica/python-frozendict
仅将 frozendict
放入您的列表中,一切都应该正常工作。
你根本不需要在这里调用 heapppush
,因为 nsmallest
已经处理了堆排序。它在内部创建一个堆并在其上推送项目。 nsmallest
本身不需要可订购的字典,因为您指定了 key
参数。
只需将 heappush 调用替换为 colors.append(color)
。
请注意,尽管您的代码在 Python 2 中有效,但它所做的只是在调用 nsmallest
.
之前以任意顺序重新排列 colors
列表
我正在移植适用于 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 中完成这项工作?
如果您希望词典可订购,则不能使用常规类型。但是,您可以使用(不可变的)frozendict
s。参见 https://github.com/slezica/python-frozendict
仅将 frozendict
放入您的列表中,一切都应该正常工作。
你根本不需要在这里调用 heapppush
,因为 nsmallest
已经处理了堆排序。它在内部创建一个堆并在其上推送项目。 nsmallest
本身不需要可订购的字典,因为您指定了 key
参数。
只需将 heappush 调用替换为 colors.append(color)
。
请注意,尽管您的代码在 Python 2 中有效,但它所做的只是在调用 nsmallest
.
colors
列表