Erklärung zur Lektion
Nach dieser Lektion kannst du:
key von sorted() nach einem abgeleiteten Wert sortieren.str.lower und len anwenden.Du weißt bereits, dass sorted(values) eine sortierte Liste erzeugt und list.sort() eine vorhandene Liste ändert. Mit key= wird das Sortieren in Python flexibler: Die Schlüsselfunktion erhält jedes Element und gibt den Wert zurück, den Python vergleicht.
sorted(names, key=str.lower)Mit key=len werden längere Strings nach ihrer Länge geordnet. Beachte, dass str.lower und len als Funktionen übergeben werden – ohne Klammern hinter ihren Namen.
Wenn du Datensätze sortierst, schreibe eine kleine benannte Funktion, die einen Datensatz erhält und seinen Rangschlüssel zurückgibt. Du kannst ein Tupel wie (priority, name) zurückgeben, um Gleichstände aufzulösen: Python vergleicht das erste Element und bei Bedarf das nächste.
Das Sortieren in Python ist stabil: Wenn zwei Elemente gleiche Schlüssel haben, behalten sie ihre ursprüngliche relative Reihenfolge. reverse=True kehrt die Schlüsselreihenfolge um; es löst nicht für sich allein jede Anforderung mit gemischt aufsteigender und absteigender Sortierung. Verwende für diese Fälle sorgfältig gewählte Schlüssel.
labels = ["Worker", "api", "Cache"]
ordered = sorted(labels, key=str.lower)
print(ordered)Ausgabe:
['api', 'Cache', 'Worker']Die ursprüngliche Groß-/Kleinschreibung bleibt erhalten; nur die Vergleiche verwenden Kleinbuchstaben.
routes = ["/health", "/", "/api"]
print(sorted(routes, key=len))Ausgabe:
['/', '/api', '/health']len wird als Schlüsselfunktion übergeben und nicht einmal vor dem Sortieren aufgerufen.
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])Ausgabe:
['sync', 'backup']Die Schlüsselfunktion wird auf jeden Datensatz angewendet.
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)])Ausgabe:
['alpha', 'Beta', 'Zulu']Die numerische Stufe kommt zuerst; kleingeschriebene Teamnamen lösen Gleichstände alphabetisch auf.
| Ziel | Technik |
|---|---|
| Text ohne Beachtung der Groß-/Kleinschreibung ordnen | sorted(items, key=str.lower) |
| Nach Länge ordnen | sorted(items, key=len) |
| Dictionaries nach einem Feld sortieren | sorted(records, key=named_function) |
| Gleichstände auflösen | Aus der Schlüsselfunktion ein Tupel zurückgeben |
| Die Eingabeliste erhalten | sorted() statt .sort() verwenden |
key=str.lower, nicht key=str.lower(); Letzteres ruft eine Funktion ohne das Element auf.list.sort() verändert die Liste und gibt None zurück; sorted() gibt eine neue Liste zurück.lambda ein, nur um ein paar Datensätze zu sortieren – benannte Funktionen funktionieren gut und bleiben lesbar.