Из раздела heapq
документов на Замечания по реализации очереди с приоритетом :
Решением первых двух проблем является сохранение записей в виде трехэлементного списка, включающего приоритет, счетчик записей и задачу. Счетчик записей служит в качестве прерывателя связей, поэтому две задачи с тем же приоритетом возвращаются в порядке их добавления.
Баскетбольная интерпретация этого:
from heapq import heappush
ecount = 0
heap = []
for priority, task in (
(0, {"k":0}),
(0, {"k":0}),
):
heappush(heap, (priority, ecount, task))
ecount += 1
Результат:
>>> heap
[(0, 0, {'k': 0}), (0, 1, {'k': 0})]
(Вы также можете сделать это с помощью enumerate()
.)
Чтобы добавить немного мнений в вещи:
Почему это происходит? Какова основная причина того, что такой конфликт не разрешен, учитывая, что heapq - действительно старая библиотека?
Не совсем уверен, но в том-то и дело, что вы не можете логически сравнить два dict
меньше / больше чем.
Независимо от heapq
, сравнение (0,{"k":0}) > (0,{"k":1})
будет (справедливо) повышаться TypeError
. Акцент heapq
состоит в том, что операции должны быть детерминированными : тай-брейк не должен быть случайным, и вам решать, как с этим справиться.