Priority Queue using Queue and Heapdict module in Python - GeeksforGeeks

31 Dec, 2020
Priority Queue is an extension of the queue with the following properties.
An element with high priority is dequeued before an element with low priority.
If two elements have the same priority, they are served according to their order in the queue.
It is a constructor for a priority queue. maxsize is the number of elements which can be inserted into queue, its default value is 0. If the maxsize value is less than or equal to 0, then queue size is infinite. Items are retrieved priority order (lowest first).Functions-
put() – Puts an item into the queue.
get() – Removes and returns an item from the queue.
qsize() – Returns the current queue size.
empty() – Returns True if the queue is empty, False otherwise. It is equivalent to qsize()==0.
full() – Returns True if the queue is full, False otherwise. It is equivalent to qsize()>=maxsize.
Note : empty(), full(), qsize() are not reliable as they risk race condition where the queue size might change.
Example:
from queue import PriorityQueue  q = PriorityQueue()  # insert into queueq.put((2, 'g'))q.put((3, 'e'))q.put((4, 'k'))q.put((5, 's'))q.put((1, 'e'))  # remove and return # lowest priority itemprint(q.get())print(q.get())  # check queue sizeprint('Items in queue :', q.qsize())  # check if queue is emptyprint('Is queue empty :', q.empty())  # check if queue is fullprint('Is queue full :', q.full())
Output :
(1, 'e')
(2, 'g')
Items in queue : 3
Is queue empty : False
Is queue full : False

Heapdict implements the MutableMapping ABC, meaning it works pretty much like a regular Python dictionary. It’s designed to be used as a priority queue. Along with functions provided by ordinary dict(), it also has popitem() and peekitem() functions which return the pair with the lowest priority. Unlike heapq module, the HeapDict supports efficiently changing the priority of an existing object (“decrease-key” ). Altering the priority is important for many algorithms such as Dijkstra’s Algorithm and A*.
Functions-
clear(self) – D.clear() -> None. Remove all items from D.
peekitem(self) – D.peekitem() -> (k, v), return the (key, value) pair with lowest value; but raise KeyError if D is empty.
popitem(self) – D.popitem() -> (k, v), remove and return the (key, value) pair with lowest value; but raise KeyError if D is empty.
get(self, key, default=None) – D.get(k[, d]) -> D[k] if k in D, else d. d defaults to None.
items(self) – D.items() -> a set-like object providing a view on D’s items
keys(self) – D.keys() -> a set-like object providing a view on D’s keys
values(self) – D.values() -> an object providing a view on D’s values
Example:
import heapdict  h = heapdict.heapdict()  # Adding pairs into heapdicth['g']= 2h['e']= 1h['k']= 3h['s']= 4  print('list of key:value pairs in h:\n',       list(h.items()))print('pair with lowest priority:\n',      h.peekitem())print('list of keys in h:\n',      list(h.keys()))print('list of values in h:\n',      list(h.values()))print('remove pair with lowest priority:\n',      h.popitem())print('get value for key 5 in h:\n',      h.get(5, 'Not found'))  # clear heapdict hh.clear()print(list(h.items()))
Output :
list of key:value pairs in h:
 [('g', 2), ('e', 1), ('k', 3), ('s', 4)]
pair with lowest priority:
 ('e', 1)
list of keys in h:
 ['g', 'e', 'k', 's']
list of values in h:
 [2, 1, 3, 4]
remove pair with lowest priority:
 ('e', 1)
get value for key 5 in h:
 Not found
[]

priority-queue
Python DSA-exercises
python-modules
Python
priority-queue
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Python OOPs Concepts
How to Install PIP on Windows ?
Bar Plot in Matplotlib
Defaultdict in Python
Python Classes and Objects
Deque in Python
Check if element exists in list in Python
How to drop one or multiple columns in Pandas Dataframe
Python - Ways to remove duplicates from list
Class method vs Static method in Python