defaultdict
Automatycznie inicjalizuj wartości słownika
defaultdict to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.
Problem brakującego klucza
W przypadku zwykłego obiektu dict dostęp do nieistniejącego klucza zgłasza wyjątek KeyError. Jest to kłopotliwe, gdy chcą Państwo stopniowo budować wartości.
d = {}
try:
d['x'].append(1)
except KeyError as e:
print('KeyError:', e)Poznajemy defaultdict
defaultdict z modułu collections przyjmuje funkcję fabrykującą, która tworzy wartość domyślną dla każdego brakującego klucza. Zaimportuj ją za pomocą from collections import defaultdict.
from collections import defaultdict
d = defaultdict(int)
print(d['missing'])
print(dict(d))Zliczanie za pomocą int
W przypadku defaultdict(int) brakujące klucze domyślnie otrzymują wartość 0, więc można je zwiększać bez wcześniejszego sprawdzania.
from collections import defaultdict
counts = defaultdict(int)
for ch in 'banana':
counts[ch] += 1
print(dict(counts))Grupowanie za pomocą listy
defaultdict(list) tworzy pustą listę dla nowych kluczy, dzięki czemu doskonale nadaje się do grupowania elementów w kategorie.
from collections import defaultdict
groups = defaultdict(list)
words = ['apple', 'ant', 'bee', 'bear']
for w in words:
groups[w[0]].append(w)
print(dict(groups))Zbieranie za pomocą zbioru
Użyj defaultdict(set), gdy chcesz przechowywać unikatowe wartości dla każdego klucza. Duplikaty są automatycznie usuwane.
from collections import defaultdict
seen = defaultdict(set)
pairs = [('a', 1), ('a', 1), ('a', 2), ('b', 3)]
for k, v in pairs:
seen[k].add(v)
print(dict(seen))Fabryka musi być wywoływalna
Argumentem jest obiekt wywoływalny, który nie przyjmuje argumentów i zwraca wartość domyślną. int, list, set i dict działają, ponieważ ich wywołanie zwraca pustą wartość.
from collections import defaultdict
print(int())
print(list())
print(set())Własna wartość domyślna za pomocą lambda
Można przekazać dowolny obiekt wywoływalny bez argumentów, na przykład lambda, aby zwracał własną wartość domyślną.
from collections import defaultdict
scores = defaultdict(lambda: 100)
print(scores['new_player'])
scores['alice'] -= 10
print(dict(scores))Zagnieżdżone obiekty defaultdict
Fabryka może sama tworzyć obiekt defaultdict, co pozwala budować zagnieżdżone struktury bez ręcznej konfiguracji.
from collections import defaultdict
table = defaultdict(lambda: defaultdict(int))
table['fruit']['apples'] += 3
table['fruit']['pears'] += 2
print(table['fruit']['apples'])
print(table['fruit']['pears'])Dostęp tworzy klucz
Należy pamiętać, że samo odczytanie brakującego klucza wstawia go wraz z wartością domyślną. Po uzyskaniu dostępu klucz istnieje już w słowniku.
from collections import defaultdict
d = defaultdict(int)
_ = d['ghost']
print('ghost' in d)
print(dict(d))Sprawdzanie bez wstawiania
Aby sprawdzić klucz bez jego tworzenia, użyj metody .get() albo operatora in, które nigdy nie uruchamiają fabryki.
from collections import defaultdict
d = defaultdict(int)
print(d.get('safe', 'default'))
print('safe' in d)
print(dict(d))Konwertowanie z powrotem na dict
Owiń obiekt defaultdict w dict(), gdy potrzebujesz zwykłego słownika, na przykład przed zwróceniem go z funkcji lub przejrzystym wyświetleniem.
from collections import defaultdict
dd = defaultdict(list)
dd['a'].append(1)
plain = dict(dd)
print(type(plain))
print(plain)Szybkie sprawdzenie
Co oznacza argument przekazywany do defaultdict?
Podsumowanie: defaultdict
Najważniejsze informacje:
defaultdict(factory)automatycznie tworzy wartości dla brakujących kluczy.intzwraca 0 (zliczanie),listzwraca [] (grupowanie), asetzwraca pusty zbiór (unikatowe grupowanie).- Fabryką może być dowolny obiekt wywoływalny bez argumentów, w tym
lambda. - Odczyt brakującego klucza wstawia go do słownika; aby bezpiecznie sprawdzić klucz, użyj
.get()lubin.
from collections import defaultdict
g = defaultdict(list)
for w in ['cat', 'cow', 'dog']:
g[w[0]].append(w)
print(dict(g))Często zadawane pytania
Czy lekcja „defaultdict” jest bezpłatna?
Tak — pełny tekst „defaultdict” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „defaultdict”?
Automatycznie inicjalizuj wartości słownika Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Python Academy?
Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „defaultdict”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?
Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Counter
- defaultdict
- deque
- namedtuple i OrderedDict