使用 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。
我一直在尝试使用 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。