Как сделать сортируемый тип данных в Python? - PullRequest
8 голосов
/ 08 января 2011

У меня есть класс, представляющий что-то с несколькими полями.Когда список экземпляров этого класса отсортирован, я хочу, чтобы они были отсортированы в определенном порядке (получить определенный ключ от каждого).Я могу просто сделать list.sort(key=Classname.sortKey) и определить метод sortKey, но я бы предпочел просто сделать list.sort() и заставить его работать.Я полагаю, что могу сделать это, переопределив __cmp__.Однако что мне делать, когда я сравниваю что-то, что не относится к моему типу данных?Я думаю, что-то вроде ...

def __cmp__(self, o):
    if isinstance(o, MyClass):
        return cmp(self.sortKey(), o.sortKey())
    return object.__cmp__(self, o) ##**wrong

, но это работает вместо этого.Мне все равно, какой порядок они принимают в разнородном списке.Я бы просто вернул 0, но тогда такие вещи, как MyClass(...) == x, всегда верны, для любого x, а не экземпляра MyClass.

1 Ответ

11 голосов
/ 08 января 2011

Check http://wiki.python.org/moin/HowTo/Sorting/

Вы хотите переопределить __lt__ в своем классе, чтобы встроенная функция sort работала так, как вы описали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...