Python:不使用`key`参数对自定义类进行排序?

时间:2012-07-28 23:06:42

标签: python

您可以使用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__,它会自然地起作用吗?

3 个答案:

答案 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