Да, есть способ. Определите класс обертки, который реализует ваш собственный компаратор, и используйте их список вместо списка ваших реальных объектов. Это лучшее из того, что есть при использовании модуля heapq, поскольку он не предоставляет аргументов key = или cmp =, как это делают функции / методы сортировки.
def gen_wrapper(cmp):
class Wrapper(object):
def __init__(self, value): self.value = value
def __cmp__(self, obj): return cmp(self.value, obj.value)
return Wrapper