90 votes

Trier une liste d'instances de classe Python

J'ai une liste d'instances de classe -

x = [<iteminstance1>,...]

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

EDITAR : Le site list en python a quelque chose appelé sort . Puis-je l'utiliser ici ? Comment puis-je diriger cette fonction pour utiliser mon score attribut ?

204voto

kindall Points 60645

En plus de la solution que vous avez acceptée, vous pourriez également mettre en œuvre la solution spéciale __lt__() ("moins que") sur la classe. Le site sort() (et la méthode sorted() ) sera alors en mesure de comparer les objets et donc de les trier. Cette méthode est plus efficace si vous ne triez les objets qu'en fonction de 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()

136voto

Ned Batchelder Points 128913
import operator
sorted_x = sorted(x, key=operator.attrgetter('score'))

si vous voulez trier x en place, vous pouvez aussi le faire :

x.sort(key=operator.attrgetter('score'))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X