python中具有重复密钥的优先级队列

python中具有重复密钥的优先级队列,python,priority-queue,Python,Priority Queue,我有以下情况- In [2]: from heapq import heappush, heappop In [3]: pq =[] In [4]: heappush(pq, (2, "I hate sth")) In [5]: heappush(pq, (2, "I love sth")) In [6]: heappush(pq, (2, "I gate sth")) In [7]: heappop(pq) Out[7]: (2, 'I gate sth') 这里我希望heap返回

我有以下情况-

In [2]: from heapq import heappush, heappop

In [3]: pq =[]

In [4]: heappush(pq, (2, "I hate sth"))

In [5]: heappush(pq, (2, "I love sth"))

In [6]: heappush(pq, (2, "I gate sth"))

In [7]: heappop(pq)
Out[7]: (2, 'I gate sth')
这里我希望heap返回
(2,“我讨厌某事物”)
我的意思是,如果有任何重复项,那么它应该返回最先插入的最小项。我知道这里的项目是元组,所以第三个显然很小

但是,有没有什么方法可以分别存储优先级和字符串,以及如果出现平局,则按照插入顺序返回的项目


感谢使用PriorityQueue类-它按添加对象的顺序返回对象

from queue import PriorityQueue

q=PriorityQueue()

q.put((1,'eat'))
q.put((2,'code1'))
q.put((2,'code2'))
q.put((2,'code3'))
q.put((3,'sleep'))

while(not q.empty()):
    print(q.get())

# Output
# (1, 'eat')
# (2, 'code1')
# (2, 'code2')
# (2, 'code3')
# (3, 'sleep')

一个解决方法可能是创建一个helper方法来添加到堆中,该方法将在元组的第二个位置插入并递增计数器。是的,我正在考虑这样做,但是否有其他选项,比如python允许我将优先级队列存储为(键,对象),其中对象不包括在优先级计算中。或者,不要使用元组,而是为队列中的项目创建自己的类,该类将只使用第一个元素进行比较,或者自动处理所述计数器。这是不正确的。如果项目中的第一个值重复,它将尝试根据项目中的后续值进行排序。