对Python类实例列表进行排序
我有一个类实例的列表 -
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进行排序,你也可以这样做: