Wyjaśnienie lekcji
Po tej lekcji będziesz potrafić:
.get(key, default) do odczytu kluczy opcjonalnych z zachowaniem istniejących wartości fałszywych..items() i rozpakowywać każdą parę.Słowniki przyporządkowują nazwom wartości. Poprzednia lekcja omawiała record[key], które zgłasza KeyError dla brakującego klucza. Gdy oczekiwane jest pole opcjonalne, record.get(key, fallback) zwraca wartość zastępczą tylko wtedy, gdy klucza brakuje. Obecna wartość 0, False, "" lub None pozostaje niezmieniona.
Słownik jest iterowalny: for key in record odwiedza jego klucze. Jawne metody .keys() i .values() pozwalają uzyskać dostęp tylko do kluczy albo tylko do wartości. Użyj .items(), gdy potrzebujesz obu: każda iteracja dostarcza parę (key, value), którą możesz rozpakować.
Współczesne słowniki Pythona zachowują kolejność wstawiania, więc pętla po niezmienionym słowniku podąża za kolejnością, w jakiej wpisy zostały wstawione. Nie oznacza to, że klucze są indeksami liczbowymi ani że słownik jest sortowany alfabetycznie.
.get() słownika służy do wyszukiwania; .items() służy do iteracji po parach. Rozwiązują różne problemy i są szczególnie przydatne w połączeniu z warunkowym zliczaniem.
Wartość zastępcza obowiązuje tylko wtedy, gdy klucza nie ma.
limits = {"retries": 0, "timeout": 15}
print(limits.get("retries", 3))
print(limits.get("workers", 2))Wynik:
0
2Iterowanie bezpośrednio po słowniku daje jego klucze; .keys() jawnie wyraża ten zamiar.
channels = {"email": True, "sms": False}
for channel in channels.keys():
print(f"Channel: {channel}")Wynik:
Channel: email
Channel: smsUżyj .values(), gdy klucze nie wpływają na obliczenie.
durations = {"lint": 8, "build": 12, "test": 20}
total = 0
for duration in durations.values():
total += duration
print(f"Total: {total}")Wynik:
Total: 40.items() dostarcza każdą etykietę razem z odpowiadającą jej wartością.
statuses = {"api": "ready", "worker": "paused"}
for name, status in statuses.items():
print(f"{name}: {status}")Wynik:
api: ready
worker: paused| Potrzeba | Python |
|---|---|
| Opcjonalne wyszukiwanie | record.get("name", "unknown") |
| Tylko klucze | record.keys() lub for key in record |
| Tylko wartości | record.values() |
| Klucze i wartości | record.items() |
| Pętla po parach | for key, value in record.items(): |
record.get("key", default) nie zastępuje obecnej wartości fałszywej.for a, b in record iteruje po kluczach, a nie po parach; użyj .items(), aby rozpakować wpisy..keys(), .values() i .items() zwracają widoki (views), a nie zwykłe kopie list..values() gubi powiązaną etykietę klucza, gdy wynik potrzebuje obu.