Lektionen des Moduls (3/4)
Dictionaries
Ein Dictionary (dict) ist eine Schlüssel → Wert (Key-Value) Zuordnung: Du verknüpfst einen Schlüssel
(fast immer einen String) mit einem Wert eines beliebigen Typs. Es ist die grundlegende
Datenstruktur zur Modellierung realer Entitäten.
Ein Dictionary erstellen
vuoto = {}
utente = {"nome": "Ada", "anni": 36, "attivo": True}
# alternativer Konstruktor
utente = dict(nome="Ada", anni=36, attivo=True)Schlüssel müssen hashbar (unveränderlich) sein: Strings, Zahlen, Tupel aus hashbaren Elementen. Werte hingegen können alles sein — sogar Dictionaries.
Zugriff, Ändern, Löschen
utente["nome"] # 'Ada'
utente["email"] # KeyError!
utente.get("email") # None (sicherer Standardwert)
utente.get("email", "—") # '—' (benutzerdefinierter Standardwert)
utente["citta"] = "Roma" # fügt hinzu / aktualisiert
del utente["attivo"] # entferntIterieren über ein Dictionary
for chiave in utente: # iteriert über die SCHLÜSSEL (Standardverhalten)
print(chiave, utente[chiave])
for chiave in utente.keys(): # explizit
...
for valore in utente.values():
print(valore)
for chiave, valore in utente.items(): # das gängigste Muster
print(f"{chiave} = {valore}")Die Iterationsreihenfolge entspricht der Einfügereihenfolge (garantiert ab Python 3.7 aufwärts).
Existiert der Schlüssel?
"nome" in utente # True
"email" in utente # False (sucht nach SCHLÜSSELN, nicht nach Werten!)setdefault: Beim ersten Zugriff initialisieren
Ein häufiges Muster: "Wenn der Schlüssel nicht existiert, trage den Standardwert ein; in jedem Fall gib den aktuellen Wert zurück".
gruppi = {}
for nome in ["Ada", "Linus", "Ada", "Grace", "Linus", "Ada"]:
gruppi.setdefault(nome, []).append(1)
# {'Ada': [1, 1, 1], 'Linus': [1, 1], 'Grace': [1]}Es gibt auch collections.Counter für den spezifischen Fall des Zählens (wir
werden es im Modul stdlib sehen).
Iterieren über Dictionaries
Du kannst auf verschiedene Arten über ein Dictionary iterieren:
for k in d: iteriert nur über Schlüssel (Standardverhalten).for k, v in d.items(): iteriert gleichzeitig über Schlüssel-Wert-Paare (sehr nützlich).for v in d.values(): iteriert nur über Werte.
Probiere es aus
Gegeben sei `user = {'nome': 'Ada', 'anni': 36}`. Füge den Schlüssel 'email' = 'ada@ex.com' hinzu und weise dann `email_or_default` den Wert des Schlüssels 'telefono' unter Verwendung von .get mit dem Standardwert 'sconosciuto' zu. Evaluiere `email_or_default`.
Hinweis anzeigen
.get('telefono', 'sconosciuto') löst keinen KeyError aus.
Lösung nach 3 Versuchen verfügbar
Wiederholungsübung
Gegeben sei `prices = {'mela': 1.2, 'pera': 1.5, 'kiwi': 2.0}`. Berechne die Summe aller Werte und weise sie `total` zu. Evaluiere `total`.
Hinweis anzeigen
sum(prices.values()) summiert alle Werte.
Lösung nach 3 Versuchen verfügbar
Zusätzliche Herausforderung
Gegeben sei das Dictionary `user = {'name': 'Alice'}`. Verwende die Methode `.get()`, um den Wert des Schlüssels `'role'` abzurufen. Wenn der Schlüssel nicht existiert, soll der Standardwert `'guest'` zurückgegeben werden. Speichere das Ergebnis in `user_role` und evaluiere es.
Hinweis anzeigen
Die get-Methode akzeptiert einen zweiten Parameter als Fallback: user.get('role', 'guest').
Lösung nach 3 Versuchen verfügbar