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