您可以使用myclass
函数的key
参数对sorted
数组进行排序:
sortedlist = sorted(myclasses, key=lambda obj: obj.myproperty)
有没有办法为我们的班级定义自然顺序?也许是一些神奇的方法,这样我们每次都不必传入密钥?
如,
class myclass:
def __init__(self,a,b):
self.key1 = a
self.key2 = b
def __sortkey__(self):
return self.key2
或者,如果我们定义__le__
,它会自然地起作用吗?
答案 0 :(得分:15)
除__cmp__
之外,您还可以使用所谓的“丰富比较运算符”__eq__
,__le__
,__lt__
,__gt__
来执行此操作和__ge__
。您可以在2.7 + / 3.1 +中使用functools.total_ordering
类装饰器,而不是定义所有这些。 __cmp__
在3.x中消失了。
答案 1 :(得分:3)
我会通过覆盖__cmp__
class myclass:
def __init__(self,a,b):
self.key1 = a
self.key2 = b
def __cmp__(self, other):
return cmp(self.key2, other.key2)
答案 2 :(得分:3)
见this previous question。答案是,您只需使用__lt__
就可以逃脱,但最好使用functools.total_ordering
。