使用自定义键比较对象列表

Kyl*_*S-C 5 python sorting list

我根据它们的一个属性对一些对象进行排序,使用类似这样的东西:

sorted_list = sorted(unsorted_list, key=lambda x: x.my_attr)
Run Code Online (Sandbox Code Playgroud)

有没有办法对这些对象的列表列表进行排序,就像Python可以对整数列表列表进行排序一样?我可以__cmp__(self, other)为这些对象重载,但这会在外部包中引发困难.嵌套也可能变得任意深,所以我认为我不能只使用列表理解.

我想知道是否有什么东西我可以生成my_attrs的列表并将其链接到相应的对象列表.我想不出一个好的方法来做到这一点.

wap*_*p26 1

您可以对数据类型实现比较函数,然后依赖 Python 的排序函数。

查看类似的问题和答案:Python: Sort custom class without use of `key` argument?

简而言之,您可以使用total_ordering元类、实现__eq____lt__函数。

根据您的具体情况,您可以__eq__这样实现:

def __eq__(self, other):
    return self.my_attr == other.my_attr
Run Code Online (Sandbox Code Playgroud)

类似地对于__lt__.