我以(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'
答案 0 :(得分:2)
优先级队列的工作方式与标准队列类似,只是项目是priority, item
的元组,因此这样的队列上的get()
将返回那种元组 - 如果你想得到实际的项目你应该使用这个,它将为您提供项目及其优先级:
prio, item = queue.get()
如果您根本不关心优先级,请直接这样:
item = queue.get()[1]
有关详细信息,请参阅official Python documentation。
修改:您的评论显示您使用put(4, 8)
将值放入队列中,因此您只需将4
和8
变为block
参数put()
- 你需要像这样添加一个元组:
queue.put((4, 8))