/ / Tri des attributs d'objet dans différents ordres - python, python-3.x, tri

Tri des attributs d'objet dans différents ordres - python, python-3.x, tri

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 № 1

Si 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)