Python 将项目添加到优先级队列

Python 将项目添加到优先级队列,python,priority-queue,Python,Priority Queue,Python中Queue.PriorityQueue类的文档如下所示: 它说,“条目的典型模式是一个元组,其形式为:(优先级,数字) 但是,当我尝试将基本数据输入优先级队列时,我得到: from Queue import PriorityQueue pq = PriorityQueue() pq.put(1, "one") pq.put(2, "two") pq.put(3, "three") pq.get() 1 pq.get() 2 pq.get() 3 pq.put()中的第一个值不是

Python中Queue.PriorityQueue类的文档如下所示:

它说,“条目的典型模式是一个元组,其形式为:(优先级,数字)

但是,当我尝试将基本数据输入优先级队列时,我得到:

from Queue import PriorityQueue
pq = PriorityQueue()
pq.put(1, "one")
pq.put(2, "two")
pq.put(3, "three")
pq.get()
1
pq.get()
2
pq.get()
3
pq.put()中的第一个值不是优先级,第二个值是数据吗?这似乎是相反的。然后,当我尝试输入(数据、优先级)时,我得到:

这不是正确的顺序,因为它应该输出“一,二,三”
有什么想法吗?

第一个价值观是优先权。最低优先级首先来自队列,因此第一个示例很有意义。第二个例子也是正确的,因为按字母顺序排列的是“一”<“三”<“二”。它将字符串视为优先级并按其排序。正如你链接的页面上所说:

“首先检索值最低的条目(值最低的条目是排序(列表(条目))[0]返回的条目)。”

另外,您可能希望将元组放入队列中,我不确定,例如

pq.put((1, "some data"))
pq.put((2, "some lower priority data"))

哦,好吧,我想我明白了,那么,pq.put(1,“1”),pq.put(2,“2”)中的“1”和“2”字符串是否被完全忽略了?我认为优先级数字被忽略了,pq.get()只返回了数据是的,我认为“1”和“2”字符串被忽略了。任何对象都可以放入队列,get方法使用它们的自然排序顺序返回队列中的对象。PriorityQueue类本身不知道“优先级”;您可以使用(优先级、数据)元组来模拟它们。这里有用的例子:我认为您传递给的第二个参数是/<代码>被解释为可选的参数<代码> Bug < /Cube >(它被评估为true)。如果这个答案符合您的需要,请考虑通过点击复选标记按钮来接受它。元组优先级队列工作得很好。但是,我需要确保具有相同优先级的元组每次都会以相同的顺序退出队列,例如:(1,“某些数据),(1,“其他数据”)。您知道对于具有相同优先级的元组是否有一个tiebreaker吗?我在python中运行了一些测试,似乎tiebreaker是FIFO
pq.put((1, "some data"))
pq.put((2, "some lower priority data"))