2014-03-02 304 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