Одним из вариантов является создание небольших оберток вокруг heapq
функций для последовательного добавления / извлечения значения сортировки для / из элемента:
def heappush(h, item, key=lambda x: x):
heapq.heappush(h, (key(item), item))
def heappop(h):
return heapq.heappop(h)[1]
def heapify(h, key=lambda x: x):
for idx, item in enumerate(h):
h[idx] = (key(item), item)
heapq.heapify(h)
Тестирование с вашим образцом:
l1 = [[1, 3], [3, 2], [2, 1]]
h = []
for item in l1:
heappush(h, item, key=itemgetter(-1))
while h:
print(heappop(h))
Печать:
[2, 1]
[3, 2]
[1, 3]
Обратите внимание, что вы можете использовать h=l1; heapify(h, key=itemgetter(-1))
, который должен быть быстрее, чем индивидуально heappush
с каждым элементом.