Erklärung zur Lektion
Nach dieser Lektion kannst du:
Echte Antworten und Konfigurationen kombinieren oft mehrere Sammlungen: Ein Dictionary kann eine Liste von Diensten enthalten, und jeder Dienst kann selbst ein Dictionary sein. Lies einen verschachtelten Pfad eine Ebene nach der anderen. config["services"] wählt die Liste aus; [0] wählt einen Datensatz aus; ["name"] wählt ein Feld aus.
Verschachtelte Sammlungen sind veränderlich. Wenn du ein verschachteltes Feld über seinen Pfad änderst, änderst du die ursprüngliche Sammlung. Der Typ der äußeren Sammlung hebt die Veränderlichkeit der darin enthaltenen Objekte nicht auf.
Wenn eine verschachtelte Zuordnung optional ist, verwende .get(key, {}), um als Ersatz ein leeres Dictionary zu erhalten. Lies einen optionalen numerischen Wert mit .get(key, default) statt mit einem Ersatzwert auf Basis der Truthiness: Der Wert 0 kann beabsichtigt sein.
config = {"targets": [{"name": "staging", "port": 8081}, {"name": "prod", "port": 443}]}
print(config["targets"][1]["port"])Ausgabe:
443Der erste Zugriff liefert eine Liste; der zweite wählt ein Dictionary darin aus.
limits = {"search": {"retries": 2, "timeout": 30}}
limits["search"]["retries"] += 1
print(limits["search"]["retries"])
print(limits["search"]["timeout"])Ausgabe:
3
30Nur die Einstellung für Wiederholungsversuche ändert sich.
jobs = [{"name": "index", "done": True}, {"name": "backup", "done": False}]
for job in jobs:
if job["done"]:
print(f"Finished: {job['name']}")Ausgabe:
Finished: indexDie Schleifenvariable ist bereits ein Dictionary; ein zusätzlicher numerischer Index ist nicht nötig.
settings = {"thresholds": {"api": 0}}
thresholds = settings.get("thresholds", {})
print(thresholds.get("api", 10))
print(thresholds.get("worker", 10))Ausgabe:
0
10Eine gespeicherte Null bleibt erhalten, aber ein fehlender Schlüssel verwendet den Ersatzwert.
| Ziel | Beispiel |
|---|---|
| Ein verschachteltes Feld lesen | data["jobs"][0]["status"] |
| Ein verschachteltes Feld aktualisieren | data["limits"]["api"] = 5 |
| Datensätze durchlaufen | for record in records: |
| Ein optionales verschachteltes Dictionary lesen | data.get("limits", {}) |
| Eine gespeicherte Null bewahren | limits.get("api", 10) |
for record in records ist kein numerischer Index.data["missing"] löst KeyError aus, wenn ein Schlüssel fehlt.dict.get("key") or default ersetzt fälschlicherweise gültige Falsy-Werte wie 0.