Can I get an item from a PriorityQueue without removing it yet?
-
29-04-2021 - |
Question
I want to get the next item in queue but I don't want to dequeue it. Is it possible in Python's queue.PriorityQueue
? From the docs, I don't see how can it be done
La solution
When you get item form the queue as per theory it will remove from the queue. You have to write your own function which will give you last element of PriorityQueue. You can create a peek function by inherit the priorityqueue.
Autres conseils
If a is a PriorityQueue object, You can use a.queue[0]
to get the next item:
from queue import PriorityQueue
a = PriorityQueue()
a.put((10, "a"))
a.put((4, "b"))
a.put((3,"c"))
print(a.queue[0])
print(a.queue)
print(a.get())
print(a.queue)
print(a.get())
print(a.queue)
output is :
(3, 'c')
[(3, 'c'), (10, 'a'), (4, 'b')]
(3, 'c')
[(4, 'b'), (10, 'a')]
(4, 'b')
[(10, 'a')]
but be careful about multi thread access.
If you want next element in the PriorityQueue, in the order of the insertion of the elements, use:
for i in range(len(queue)):
print queue.queue[i]
this will not pop anything out.
If you want it in the priority order, use:
for i in range(len(queue)):
temp = queue.get()
queue.put(temp)
print temp
If you are using a tuple, instead of a single variable, replace temp by:
((temp1,temp2))
Assuming your items stored in the PriorityQueue is a tuple (key, value),
def peak(pq):
return pq.queue[0][1]
Indexing the first element of the queue should work. If you're using the heapq
library, the document mentions:
The interesting property of a heap is that its smallest element is always the root,
heap[0]
.