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
?
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'))
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()