Согласно официальному документу , решение этой проблемы - хранить записи в виде кортежей (см. Разделы 8.4.1 и 8.4.2 * 1006. *).
Например, ваш объект выглядит примерно так в формате tuple .
(ключ, значение_1, значение_2)
Когда вы помещаете объекты (т.е. кортежи ) в heap , он сравнивает первый атрибут объекта (в данном случае это key ) с сравнить. Если происходит связывание, в куче будет использоваться следующий атрибут (т. Е. value_1 ) и т. Д.
Например:
import heapq
heap = []
heapq.heappush(heap, (0,'one', 1))
heapq.heappush(heap, (1,'two', 11))
heapq.heappush(heap, (1, 'two', 2))
heapq.heappush(heap, (1, 'one', 3))
heapq.heappush(heap, (1,'two', 3))
heapq.heappush(heap, (1,'one', 4))
heapq.heappush(heap, (1,'two', 5))
heapq.heappush(heap, (1,'one', 1))
show_tree(heap)
Выход:
(0, 'one', 1)
(1, 'one', 1) (1, 'one', 4)
(1, 'one', 3) (1, 'two', 3) (1, 'two', 2) (1, 'two', 5)
(1, 'two', 11)
О симпатичной распечатке кучи в python (обновил ссылку): show_tree ()