对Python类实例列表进行排序

104 投票
2 回答
161206 浏览
提问于 2025-04-16 06:01

我有一个类实例的列表 -

x = [<iteminstance1>,...]

这个类有很多属性,其中有一个叫做 score 的属性。我该如何根据这个属性将列表中的项目按升序排序呢?

补充说明: 在Python中,list 有一个叫做 sort 的功能。我可以在这里使用它吗?我该如何让这个功能使用我的 score 属性进行排序呢?

2 个回答

229

除了你接受的解决方案,你还可以在这个类里实现一个特殊的方法叫做 __lt__()(意思是“小于”)。这样的话,sort() 方法(还有 sorted() 函数)就可以比较这些对象,从而对它们进行排序。不过,这种方法最好是在你只打算根据这个属性来排序的时候使用。

class Foo(object):

     def __init__(self, score):
         self.score = score

     def __lt__(self, other):
         return self.score < other.score

l = [Foo(3), Foo(1), Foo(2)]
l.sort()
154
import operator
sorted_x = sorted(x, key=operator.attrgetter('score'))
x.sort(key=operator.attrgetter('score'))

如果你想要在原地对x进行排序,你也可以这样做:

撰写回答