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