collections. defaultdict
Słownik, który dla brakującego klucza sam tworzy wartość domyślną, np. pustą listę lub zero.
- Zwraca
- Obiekt
defaultdict, czyli słownik z automatycznymi wartościami domyślnymi.
Przykład
#from collections import defaultdict
topics = [("HTML", "znaczniki"), ("CSS", "flexbox"), ("HTML", "formularze")]
by_course = defaultdict(list)
for course, topic in topics:
by_course[course].append(topic)
print(by_course["HTML"])
print(dict(by_course))Definicja i zastosowanie
#Klasa defaultdict z modułu collections działa jak zwykły słownik, ale przy odczycie brakującego klucza nie zgłasza KeyError. Zamiast tego wywołuje funkcję podaną przy tworzeniu, zapisuje jej wynik pod tym kluczem i go zwraca.
Funkcję podaje się bez nawiasów: defaultdict(list) tworzy dla nowych kluczy pustą listę, defaultdict(int) zero, a defaultdict(set) pusty zbiór. Możesz też podać własną funkcję, np. defaultdict(lambda: "brak").
Najczęstsze zastosowania to grupowanie (groups[key].append(item)) i sumowanie (totals[key] += value) bez sprawdzania, czy klucz już istnieje. Pamiętaj, że sam odczyt d[klucz] też dodaje brakujący klucz. Metoda get() i operator in tego nie robią.
Składnia
#from collections import defaultdict
defaultdict(default_factory)
defaultdict(list)
defaultdict(int)Parametry
#default_factory
funkcja bez argumentów lub None
Tworzy wartość dla brakującego klucza, np.listdaje[], aintdaje0. PrzyNonesłownik zachowuje się jak zwykłydict.
Więcej przykładów
#from collections import defaultdict
points = defaultdict(int)
for name, exp in [("Ania", 20), ("Kuba", 15), ("Ania", 10)]:
points[name] += exp
print(points)
print(points["Ola"])from collections import defaultdict
scores = defaultdict(list)
print(scores["Ola"])
print("Ola" in scores, len(scores))
print(scores.get("Iga"), len(scores))Dobre praktyki
#- Do sprawdzania, czy klucz istnieje, używaj
inalboget(). Odczyt przez nawiasy kwadratowe doda brakujący klucz. - Zanim przekażesz wynik dalej, zamień go na zwykły słownik przez
dict(). Czytelniej się wypisuje, a przypadkowy odczyt brakującego klucza nie doda już nowego wpisu. - Do samego zliczania elementów jeszcze wygodniejszy jest
Counter.
Powiązane hasła
#- collections.CounterSłownik do zliczania: dla każdego elementu przechowuje liczbę jego wystąpień.
- dict.setdefault()Zwraca wartość klucza, a gdy go brakuje, najpierw zapisuje w słowniku wartość domyślną.
- dict.get()Zwraca wartość dla klucza albo wartość domyślną, gdy klucza nie ma w słowniku.
- list.append()Dodaje jeden element na koniec listy.
- dict()Tworzy słownik z par klucz–wartość lub argumentów nazwanych.
Widzisz błąd albo brakuje przykładu? Napisz do nas.