`PriorityQueue` 是否尊重元组的顺序?

Does `PriorityQueue` respect the ordering of tuples?

我需要用一些数据维护一个 PriorityQueue。数据的排序不是我想要在 PriorityQueue 中维护的排序(两种不同的排序服务于不同的目的)。实际上,我想要队列中元素的顺序是由三个函数决定的:

1) 评分函数A.

2) 评分函数B.

3) 元素添加到队列的顺序。

为了保持队列的顺序,我写了如下内容:

import queue
s = State(...)
id = s.immutableID
pq = queue.PriorityQueue()
counter = 0

priority = (A(s), B(s), counter)

pq.put( (priority, id) )
counter += 1

这显示了试图让 PriorityQueue 维持我想要的顺序背后的粗略策略。稍后在代码中我创建了几个 State 的新实例,对它们的优先级进行评分,递增计数器,然后循环。

如果我这样做,它基本上会在元组上使用 "dictionary ordering" 吗?也就是说,PriorityQueue会不会确定所有第一个坐标早的元素都最早插入,并列中,所有第二个坐标早的元素都最早插入,以此类推?

根据文档,我很确定答案是 "yes",因为它使用 sort 函数,而 sort 使用 <=<= 在元组上使用字典排序。但以防万一这些推论中的任何一个遗漏了我应该注意的东西,我想问一下。

是的,顺序将基于 complex sort of tuples which you called "dictionary ordering". According to the docs on PriorityQueue

The lowest valued entries are retrieved first (the lowest valued entry is the one returned by sorted(list(entries))[0]).

和排序,特别是 list.sort() and sorted(), is guaranteed to be stable