Erklärung zur Lektion
Am Ende dieser Lektion kannst du:
In der vorherigen Lektion hat eine List Comprehension aus einem iterierbaren Objekt eine Liste erzeugt. Dictionary Comprehensions verwenden geschweifte Klammern mit einem key: value-Paar:
new_dict = {key_expression: value_expression for item in source}Verwende .items(), um Schlüssel und Werte eines Dictionarys gemeinsam zu verarbeiten; füge ein nachgestelltes if hinzu, um Einträge auszuschließen. Ein Dictionary behält einen Wert pro Schlüssel. Wenn mehrere Eingabeeinträge denselben Schlüssel erzeugen, ersetzt das spätere Ergebnis den früheren Wert. Die Quellsammlung wird nicht verändert.
Eine Set Comprehension verwendet ebenfalls geschweifte Klammern, hat aber keinen Doppelpunkt:
new_set = {expression for item in source}Mengen behalten eindeutige Werte, ihre Iterationsreihenfolge ist aber nicht garantiert. Wenn die Ausgabe eine vorhersagbare Reihenfolge braucht, sortiere die entstandene Menge, bevor du sie ausgibst oder als Liste zurückgibst. Wie bei List Comprehensions gilt: Wähle eine normale Schleife, wenn die Umwandlung mehrere Schritte oder Nebeneffekte hat.
Wähle für jedes Element einen Schlüssel und einen abgeleiteten Wert:
packages = ["api", "worker", "mailer"]
name_lengths = {package: len(package) for package in packages}
print(name_lengths)Ausgabe:
{'api': 3, 'worker': 6, 'mailer': 6}Jedes Paket wird zu einem Schlüssel; seine Länge wird zum Wert.
Verwende .items(), um auf beide Teile jedes Eintrags zuzugreifen:
balances = {"ops": 55, "research": 20, "support": 80}
raised = {team: amount + 10 for team, amount in balances.items() if amount >= 50}
print(raised)Ausgabe:
{'ops': 65, 'support': 90}Der Eintrag research wird ausgeschlossen, und das ursprüngliche Dictionary enthält weiterhin seine ursprünglichen Werte.
Eine Set Comprehension behält jede unterschiedliche bereinigte Bezeichnung nur einmal:
raw_labels = [" Backend ", "backend", "DATA", "data "]
labels = {value.strip().lower() for value in raw_labels}
print(sorted(labels))Ausgabe:
['backend', 'data']Wir verwenden sorted() für eine vorhersagbare Anzeige – nicht, weil die Menge selbst eine sortierte Reihenfolge hätte.
Wenn unterschiedliche Werte denselben Schlüssel erzeugen, gewinnt die spätere Zuweisung:
entries = ["DEV", "dev", "Test"]
last_seen = {name.lower(): name for name in entries}
print(last_seen)Ausgabe:
{'dev': 'dev', 'test': 'Test'}Die ersten beiden Einträge erzeugen beide dev; der spätere Originalwert überschreibt den früheren.
| Absicht | Syntax |
|---|---|
| Dictionary aus Elementen | {key: value for item in source} |
| Dictionary filtern | {k: v for k, v in source.items() if condition} |
| Menge eindeutiger Werte | {expression for item in source} |
| Vorhersagbare Anzeige | sorted(your_set) |
if-Filter stehen nach dem for-Teil, nicht davor.{} bei einem Dictionary bzw. set() bei einer Menge.