【问题标题】:Python: Sort custom class without use of `key` argument?Python:在不使用“key”参数的情况下对自定义类进行排序?
【发布时间】:2012-07-27 04:03:20
【问题描述】:

您可以使用sorted 函数的key 参数对myclass 的数组进行排序:

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__,它自然会起作用吗?

【问题讨论】:

    标签: python


    【解决方案1】:

    除了__cmp__,您还可以使用所谓的“丰富的比较运算符”__eq____le____lt____gt____ge__。您可以使用 2.7+/3.1+ 中的 functools.total_ordering 类装饰器,而不是定义所有这些。 __cmp__ 在 3.x 中消失了。

    【讨论】:

    • 更好。 __le__ 更容易实现,因为我只需要返回一个布尔值。
    【解决方案2】:

    我会通过覆盖__cmp__来做到这一点

    class myclass:
        def __init__(self,a,b):
            self.key1 = a
            self.key2 = b
    
        def __cmp__(self, other):
            return cmp(self.key2, other.key2)
    

    【讨论】:

    【解决方案3】:

    this previous question。答案是你可以不使用__lt__,但最好使用functools.total_ordering

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 2017-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多