如何在Python中创建可排序的数据类型?

10 投票
1 回答
7919 浏览
提问于 2025-04-16 09:35

我有一个类,这个类里面有几个字段。当我把这个类的多个实例放在一起排序时,我希望它们按照特定的顺序排列(从每个实例中获取一个特定的值)。我可以直接用 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 个回答

13

可以看看这个链接:http://wiki.python.org/moin/HowTo/Sorting/

如果你想让内置的 sort 函数按照你想要的方式工作,就需要在你的类里重写 __lt__ 这个方法。

撰写回答