Wyjaśnienie lekcji
Po tej lekcji będziesz potrafić:
Prawdziwe odpowiedzi i konfiguracje często łączą kolekcje: słownik może zawierać listę usług, a każda usługa może być sama słownikiem. Zagnieżdżoną ścieżkę czytaj poziom po poziomie. config["services"] wybiera listę; [0] wybiera rekord; ["name"] wybiera pole.
Zagnieżdżone kolekcje są modyfikowalne. Zmiana zagnieżdżonego pola przez jego ścieżkę zmienia oryginalną kolekcję. Typ kolekcji zewnętrznej nie znosi modyfikowalności obiektów w jej wnętrzu.
Gdy zagnieżdżone odwzorowanie jest opcjonalne, użyj .get(key, {}), aby uzyskać pusty słownik jako wartość zastępczą. Opcjonalną wartość liczbową odczytuj za pomocą .get(key, default), a nie zastępstwem opartym na wartości prawdziwej: wartość 0 może być zamierzona.
config = {"targets": [{"name": "staging", "port": 8081}, {"name": "prod", "port": 443}]}
print(config["targets"][1]["port"])Wynik:
443Pierwsze wyszukanie zwraca listę; drugie wybiera w niej słownik.
limits = {"search": {"retries": 2, "timeout": 30}}
limits["search"]["retries"] += 1
print(limits["search"]["retries"])
print(limits["search"]["timeout"])Wynik:
3
30Zmienia się tylko ustawienie ponowień.
jobs = [{"name": "index", "done": True}, {"name": "backup", "done": False}]
for job in jobs:
if job["done"]:
print(f"Finished: {job['name']}")Wynik:
Finished: indexZmienna pętli jest już jednym słownikiem; dodatkowy indeks liczbowy nie jest potrzebny.
settings = {"thresholds": {"api": 0}}
thresholds = settings.get("thresholds", {})
print(thresholds.get("api", 10))
print(thresholds.get("worker", 10))Wynik:
0
10Zapisane zero zostaje zachowane, ale brakujący klucz używa wartości zastępczej.
| Cel | Przykład |
|---|---|
| Odczyt zagnieżdżonego pola | data["jobs"][0]["status"] |
| Aktualizacja zagnieżdżonego pola | data["limits"]["api"] = 5 |
| Iteracja po rekordach | for record in records: |
| Odczyt opcjonalnego zagnieżdżonego słownika | data.get("limits", {}) |
| Zachowanie zapisanego zera | limits.get("api", 10) |
for record in records nie jest indeksem liczbowym.data["missing"] zgłasza KeyError, gdy klucza brakuje.dict.get("key") or default błędnie zastępuje poprawne wartości fałszywe, takie jak 0.