Explication de la leçon
Après cette leçon, tu seras capable de :
key de sorted().str.lower et len.Tu sais déjà que sorted(values) crée une liste triée et que list.sort() modifie une liste existante. Le paramètre key= de Python rend le tri plus flexible : la fonction clé reçoit chaque élément et renvoie la valeur que Python compare.
sorted(names, key=str.lower)Pour des chaînes plus longues, key=len ordonne par longueur. Note que str.lower et len sont transmises comme fonctions—sans parenthèses après leur nom.
Lors du tri d'enregistrements, écris une petite fonction nommée qui prend un enregistrement et renvoie sa clé de classement. Tu peux renvoyer un tuple comme (priority, name) pour départager les égalités : Python compare le premier élément, puis le suivant si nécessaire.
Le tri en Python est stable : si deux éléments ont des clés égales, ils conservent leur ordre relatif d'origine. reverse=True inverse le classement par clé ; il ne résout pas à lui seul tous les cas de tri mixte croissant/décroissant. Utilise des clés soigneusement choisies pour ces cas.
labels = ["Worker", "api", "Cache"]
ordered = sorted(labels, key=str.lower)
print(ordered)Sortie :
['api', 'Cache', 'Worker']La casse d'origine est préservée ; seules les comparaisons utilisent les minuscules.
routes = ["/health", "/", "/api"]
print(sorted(routes, key=len))Sortie :
['/', '/api', '/health']len est passée comme fonction clé, et non appelée une seule fois avant le tri.
jobs = [
{"name": "backup", "duration": 40},
{"name": "sync", "duration": 10},
]
def duration_key(job):
return job["duration"]
ordered = sorted(jobs, key=duration_key)
print([job["name"] for job in ordered])Sortie :
['sync', 'backup']La fonction clé est appliquée à chaque enregistrement.
alerts = [
{"team": "Zulu", "level": 2},
{"team": "alpha", "level": 1},
{"team": "Beta", "level": 2},
]
def alert_key(alert):
return (alert["level"], alert["team"].lower())
print([item["team"] for item in sorted(alerts, key=alert_key)])Sortie :
['alpha', 'Beta', 'Zulu']Le niveau numérique vient en premier ; les noms d'équipes en minuscules départagent les égalités par ordre alphabétique.
| Objectif | Technique |
|---|---|
| Ordre de texte insensible à la casse | sorted(items, key=str.lower) |
| Ordonner par longueur | sorted(items, key=len) |
| Trier des dictionnaires selon un champ | sorted(records, key=named_function) |
| Départager les égalités | Renvoyer un tuple depuis la fonction clé |
| Préserver la liste d'entrée | Utiliser sorted() au lieu de .sort() |
key=str.lower, et non key=str.lower() ; ce dernier appelle une fonction sans l'élément.list.sort() modifie la liste et renvoie None ; sorted() renvoie une nouvelle liste.lambda simplement pour trier quelques enregistrements—les fonctions nommées fonctionnent très bien et restent lisibles.