4

我有一个 python 列表,其项目是具有各种属性的类的对象,例如生日分数,周年纪念分数,婴儿分数.....我想根据这些属性之一对列表进行排序,比如周年纪念分数。我该怎么做 ?

4

4 回答 4

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

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

import operator
your_list.sort(key=operator.attrgetter('anniversary_score'))
于 2013-06-11T07:26:52.457 回答
5

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

from operator import attrgetter

sorted(my_list, key=attrgetter('anniversary_score'))
于 2013-06-11T07:34:38.393 回答
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 排序的所有信息。

于 2013-06-11T07:30:38.780 回答
2

一种方法是在你的类中定义__lt__()and__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
于 2013-06-11T07:49:12.257 回答