2014-03-02 93 views
0

我加入的优先级队列数据的(priority,data)形式,但是当我使用的功能get(),我回到我的首要任务,而不是数据。另外,如果我以(data,priority)的形式添加,则按数据值排序。优先级队列在python

这里是我的审判代码

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 

第一个是给错误 类型错误:“诠释”对象不是可迭代 和第二个 类型错误:“诠释”对象有没有属性“的GetItem”

+4

请添加代码迄今 –

回答

2

优先级队列就像一个标准的队列除了项目的priority, item元组,所以get()这样的队列将返回那种元组的 - 如果你想,你应该用实际的项目无论是这里面就会给你带来项目a第二它的优先级:

prio, item = queue.get() 

或者直接像这样的,如果你不关心的优先级在所有:

item = queue.get()[1] 

更多信息,请参见official Python documentation

编辑:您的评论表明,你把这些值在队列put(4, 8),所以你只有把48成为put()block参数 - 你需要把一个元组像这样:

queue.put((4, 8)) 
+0

第一个是给错误 类型错误:“诠释”对象不是可迭代 和第二个 类型错误:“诠释”对象有没有属性“__getitem__” 这里是我的TRIA升从队列进口的PriorityQueue代码 Q = PriorityQueue中(0) q.put(4,8) q.put(3,7) q.put(2,6) q.put(1,5- ) 同时不q.empty(): \t \t项= q.get()[1] \t \t打印项, 打印 q = PriorityQueue中(0) q.put(4,5) q .put(3,6) q.put(2,7) q.put(1,8) while q.empty(): \t \t item = q.get()[1] \t \t print item, print – Ruturaj

+0

@Ruturaj什么错误?编辑你的问题并添加你的错误和你的代码。你也确定你的队列实际上是一个'PriorityQueue'而不是别的吗? – 2014-03-02 04:00:37

+0

@Ruturaj看到我编辑的答案。 – 2014-03-02 04:06:46