LyCode Lab

Chapitre 3 : Tri suivant une colonne, sorted et key

Trier une table

Un classement, un palmarès, une liste alphabétique : trier est l'une des opérations les plus courantes sur une table. Python fournit une fonction de tri intégrée : tu n'as pas à écrire l'algorithme, mais tu dois lui dire suivant quelle colonne classer les lignes.

Au programme de NSI : Traitement de données en tables : Tri d'une table. Trier une table suivant une colonne.

La fonction sorted et le paramètre key

sorted(t) renvoie un nouveau tableau trié, sans modifier t. Pour trier des lignes (des dictionnaires), il faut indiquer la valeur à comparer pour chaque ligne : c'est le paramètre key, une fonction qui prend une ligne et renvoie la valeur de tri.

Trier les visiteurs par âge
import csv

with open('visiteurs.csv', encoding='utf-8') as f:
    table = list(csv.DictReader(f))

par_age = sorted(table, key=lambda ligne: int(ligne['age']))
print([ligne['nom'] for ligne in par_age])

Ordre décroissant et tri en place

reverse=True inverse l'ordre : du plus grand au plus petit. La méthode t.sort(...) fait la même chose mais modifie le tableau lui-même (et ne renvoie rien). Le tri de Python est stable : deux lignes qui ont la même valeur de tri gardent leur ordre d'origine.

Les trois visiteurs les plus âgés
par_age = sorted(table, key=lambda l: int(l['age']), reverse=True)
trois = par_age[:3]
print([l['nom'] for l in trois])

Trier suivant plusieurs colonnes

Pour classer d'abord par une colonne, puis par une autre en cas d'égalité, la fonction key renvoie un p-uplet : Python compare les p-uplets élément par élément.

Par ville, puis par nom
classement = sorted(table, key=lambda l: (l['ville'], l['nom']))
print([(l['ville'], l['nom']) for l in classement])

Le piège des nombres écrits en texte

bijoux.csv : Les poids sont lus comme des textes.
objet,poids
bague,9
collier,120
montre,45
broche,8
diademe,1000
bracelet,60
Avec et sans conversion
poids = ['9', '120', '45', '8', '1000', '60']
print(sorted(poids))
print(sorted(poids, key=int))

À toi de jouer : Exercice guidé

Trie la table par âge croissant (en nombres) et range dans noms les noms des visiteurs dans cet ordre. Complète la fonction key.

Passer à l'énigme : Classer les suspects