如何使类数据可排序

mli*_*ner 1 python sorting

这肯定是重复的,但是说我有一个类如下:

class MyObj(object):
    def __init__(self, *args, **kwargs):
        self._data = [2, 1, 3]
        self._more_data = [False, True, False]
Run Code Online (Sandbox Code Playgroud)

我怎样才能使它可以排序,而不是与其他MyObj对象(我可以用它做__lt__),但在内部?所以如果我打电话给sorted(my_obj_instance)我得到一个包含以下数据的版本:

self._data = [1,2,3]
self._more_data [True, False, False]
Run Code Online (Sandbox Code Playgroud)

也就是说,_data按数字排序,_more_data已相应排序.

Thi*_*ter 5

sorted() 永远不会修改原始数据.为了使它能够使用你必须实现的自定义对象__iter__(例如返回iter(self._data)) - 但这只会给你一个该对象的排序版本,既不修改原始对象也不对两个列表进行排序.

你想要的是一种sort()你称之为的方法yourobj.sort().然后,此方法将.sort()使用适当的key参数调用列表,以便按需要对它们进行排序.