使用类的对象作为其项目对列表进行排序

时间:2013-06-11 07:25:36

标签: python list class sorting

我有一个python列表,其项目是具有各种属性的类的对象,例如birthday_score,anniversary_score,baby_score .....我想根据其中一个属性对列表进行排序,例如anniversary_score。我该怎么做?

4 个答案:

答案 0 :(得分:8)

your_list.sort(key = lambda x : x.anniversary_score)

或者如果属性名称是字符串,那么您可以使用:

import operator
your_list.sort(key=operator.attrgetter('anniversary_score'))

答案 1 :(得分:5)

如果您事先不知道属性的名称(例如,可能来自文件或函数参数),

attrgetter会很方便。

from operator import attrgetter

sorted(my_list, key=attrgetter('anniversary_score'))

答案 2 :(得分:3)

使用sorted

class X():
     def __init__(self, a_s):
          self.anniversary_score = a_s

li = [X(1), X(2), X(3), X(4)]
sorted(li, key=lambda x: x.anniversary_score)

通常情况下,Python Sorting Wiki几乎包含了您在Python中进行排序所需要知道的一切。

答案 3 :(得分:2)

一种方法是在您的班级中定义__lt__()__eq__()方法,这些方法将告诉Python如何将一个类的实例与另一个实例进行排序:

class A():
    def __init__(self):
        self.sortattr = 'anniversary_score' # you can use 'baby_score', 'birthday_score' instead
    def __lt__(self, other):
        return getattr(self, self.sortattr) < getattr(other, other.sortattr)
    def __eq__(self, other):
        return getattr(self, self.sortattr) == getattr(other, other.sortattr)

然后,只需像使用sort()一样使用数字,字符串等列表:

 mylist.sort() # to sort in-place

 sorted(mylist)  # to return a new sorted list