python中是否存在"Lifo"类型的优先级队列,以防多个元素具有相同的优先级?

Is there a "Lifo" type priority queue in python in case of multiple elements with the same priority?

我在 python 的优先级队列中有两个排名相同的元组。 get 方法将获取第一个插入的元素。 如果两个元素在队列中具有相同的优先级,我想首先返回最后插入的元素:

#python 3.7
import queue
q= queue.PriorityQueue()
q.put((1, 'first_in'))
q.put((1, 'last_in'))
q.put((2, 'not_to_be_returned'))

for i in range(q.qsize()):
    print(q.get(i))

#Returns
(1, 'first_in')
(1, 'last_in')
(2, 'not_to_be_returned')

#looking for : 
(1, 'last_in') # in case of same rank return the last inserted
(1, 'first_in') 
(2, 'not_to_be_returned')

#Merci

是的,那就是 queue.LifoQueue。参见 docs

如果您确实需要这种排序,解决它的最简单方法是向您的元组添加一个新的第二个元素,当两个元组中的第一个元素相同时,该元素将用于打破平局。

对于 LIFO 排序,您使用每次插入时递减的计数器。然后你的元素变成:

q.put((1, 0, 'first_in'))
q.put((1, -1, 'last_in'))
q.put((2, -2, 'not_to_be_returned'))