web-dev-qa-db-fra.com

Trier une liste d'instances de classe Python

J'ai une liste d'instances de classe -

x = [<iteminstance1>,...]

entre autres attributs, la classe a l'attribut score. Comment puis-je trier les éléments par ordre croissant en fonction de ce paramètre?

MODIFIER : le list dans python a quelque chose appelé sort. Puis-je utiliser Comment puis-je demander à cette fonction d'utiliser mon attribut score?

59
Inception
import operator
sorted_x = sorted(x, key=operator.attrgetter('score'))

si vous souhaitez trier x sur place, vous pouvez également:

x.sort(key=operator.attrgetter('score'))
93
Ned Batchelder

En plus de la solution que vous avez acceptée, vous pouvez également implémenter la méthode spéciale __lt__() ("moins que") sur la classe. La méthode sort() (et la fonction sorted()) pourra alors comparer les objets, et donc les trier. Cependant, cela fonctionne mieux lorsque vous ne les trierez que sur cet attribut.

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()
138
kindall