Adloun

Trier un dictionnaire de notes par valeur décroissante

Exercice supplémentaire · niveau 2 · NSI (première), chapitre 5 — Les dictionnaires · Les outils de la bibliothèque

Énoncé

Trier un dictionnaire de notes par valeur décroissante. Que fait sorted(d) tout court ? Comment rendre le tri reproductible en cas d'ex aequo ?

Corrigé


notes = {"Nour": 15, "Yanis": 8, "Camille": 15, "Alex": 12}

assert sorted(notes) == ["Alex", "Camille", "Nour", "Yanis"]   # les CLES

par_note = sorted(notes.items(), key=lambda c: -c[1])
assert par_note[0][1] == 15 and par_note[-1] == ("Yanis", 8)

stable = sorted(notes.items(), key=lambda c: (-c[1], c[0]))
assert stable == [("Camille", 15), ("Nour", 15), ("Alex", 12), ("Yanis", 8)]

sorted(d) trie les clés : c'est le comportement par défaut de l'itération sur un dictionnaire, et il surprend quand on attendait les couples.

Le tri à deux critères. key=lambda c: (-c[1], c[0]) range d'abord par note décroissante, puis, à note égale, par ordre alphabétique. Sans le second critère, Camille et Nour restent dans leur ordre d'insertion — reproductible en Python, mais pour une raison qui n'est pas une garantie du langage. Un classement publié doit être total : il ne peut pas laisser la place d'un élève dépendre de l'ordre où on l'a saisi.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.