如何在Python中制作可排序的数据类型?

时间:2011-01-07 21:12:45

标签: python sorting data-structures

我有一个代表几个字段的类。当对这个类的实例列表进行排序时,我希望它们按特定顺序排序(从每个类中获取一个特定的键)。我可以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 个答案:

答案 0 :(得分:11)

查看http://wiki.python.org/moin/HowTo/Sorting/

您希望覆盖类中的__lt__,以使内置sort函数按您所描述的方式工作。