python中的优先级队列

时间:2014-03-02 03:46:54

标签: python python-2.7

我以(priority,data)的形式在优先级队列中添加数据但是当我使用函数get()时,我恢复了我的优先级而不是数据。另外,如果我以(data,priority)的形式添加,则按数据值排序。

这是我的试用代码

from Queue import PriorityQueue
q= PriorityQueue(0)
q.put(4,8)
q.put(3,7)
q.put(2,6)
q.put(1,5)
while not q.empty():
    item = q.get()[1]
    print item,
print

q= PriorityQueue(0)
q.put(4,5)
q.put(3,6)
q.put(2,7)
q.put(1,8)
while not q.empty():
    item = q.get()[1]
    print item,
print

第一个是错误 TypeError:'int'对象不可迭代 第二个 TypeError:'int'对象没有属性'getitem'

1 个答案:

答案 0 :(得分:2)

优先级队列的工作方式与标准队列类似,只是项目是priority, item的元组,因此这样的队列上的get()将返回那种元组 - 如果你想得到实际的项目你应该使用这个,它将为您提供项目及其优先级:

prio, item = queue.get()

如果您根本不关心优先级,请直接这样:

item = queue.get()[1]

有关详细信息,请参阅official Python documentation

修改:您的评论显示您使用put(4, 8)将值放入队列中,因此您只需将48变为block参数put() - 你需要像这样添加一个元组

queue.put((4, 8))