Je suis en train d’écrire un programme de football et je veuxtrier le tableau avant de l'imprimer. Chaque équipe est membre d’une classe avec certains attributs et jusqu’à présent, j’ai été capable de trier correctement les attributs d’entiers.
for team in sorted(teams, key=attrgetter("points", "goalDiff", "scored", "name"), reverse = True):
Je veux tous les attributs sauf name
être inversé, existe-t-il un moyen possible de "renverser" le name
attribuer dans cette ligne de code ou dois-je adopter une approche différente?
Réponses:
6 pour la réponse № 1Si tous les attributs (à l'exception du nom) sont numériques, annulez ces chiffres pour obtenir un tri inversé pour ceux-ci:
sorted(teams, key=lambda t: (-t.points, -t.goalDiff, -t.scored, t.name))
La négation des nombres vous permet d'inverser leur ordre de tri sans avoir à inverser le tri.
Si ce n’est pas le cas, vous devrez alors trier deux fois, d’abord par la name
attribut (en ordre aval), puis en ordre inverse des autres attributs. Pour tout objet où points
, goalDiff
et scored
sont égaux, l'ordre de tri d'origine (par nom) est conservé, car l'algorithme de tri utilisé par Python est stable:
sorted(
sorted(teams, key=attrgetter("name")),
key=attrgetter("points", "goalDiff", "scored"),
reverse=True)