【发布时间】:2020-08-09 13:59:32
【问题描述】:
我正在使用
from queue import PriorityQueue
pq = PriorityQueue()
pq.put((3, "Harry"))
pq.put((4, "Harry"))
pq.put((2, "Mary"))
这会创建两个“Harry”条目。我是否应该一一删除所有键(用于搜索),然后执行 put 以更新值?
【问题讨论】:
-
您要更新哪个“哈利”?它们已经按入队顺序“排序”了。
-
我实际上只想在优先级队列中有一个“Harry”,我想将其优先级从 3 更新到 4。“put”函数调用创建两个“Harry”而不是更新第一个“哈利”。
-
我不认为
PriorityQueue支持删除项目或更改优先级。 -
顺便说一句,除非您专门将此队列用作将消息从生产者线程发送到消费者线程的通道,否则您可能应该改用
heapq。queue模块专门用作线程间消息传递系统,它具有对其他用途没有意义的设计选择和开销。 -
stackoverflow.com/a/8706363/56778 解释了如何在堆中删除。 Python 的
PriorityQueue和heapq都不能让您访问实现这一点所需的支持数组。
标签: python priority-queue