使用 heappush 在列表中添加字典

Adding dictionaries in lists using heappush

我一直在尝试使用 heappush 函数将词典添加到列表中。第一个 heappush 语句运行良好,执行之后的 print 语句。

#random tests
node1 = {'a':1, 'b':2, 'c':3}
node2 = {'c':4, 'd':5, 'e':6}
lists = []
heappush(lists, node1)
print(lists)
heappush(lists, node2)

但是,当我尝试执行第二个 heappush 语句时,出现以下错误。

[{'a': 1, 'b': 2, 'c': 3}]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-24-c680e53f9699> in <module>()
      5 heappush(lists, node1)
      6 print(lists)
----> 7 heappush(lists, node2)

TypeError: '<' not supported between instances of 'dict' and 'dict'

这是为什么?我知道我可以使用 append 函数将字典附加到列表中,但我想改用 heappush

heap数据结构以特定格式存储列表中的元素,因此pop()push()函数都是O(log n)。当在 heap 中放置一个新元素时,我们需要将它与 heap 中的其他对象进行比较,以确定新项目在 list 中的位置,这是使用比较完成的运算符 <.

Python 字典没有定义比较运算符来决定哪个字典比另一个字典 smaller/larger。将 dicts 放入 heap 的用例是什么?如果您想对字典进行某种排序,您需要自己为字典定义 comparator methods