0Pricing
Python Academy · Lekcja

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.
  • int zwraca 0 (zliczanie), list zwraca [] (grupowanie), a set zwraca 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() lub in.
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

  1. Counter
  2. defaultdict
  3. deque
  4. namedtuple i OrderedDict
← Powrót do Python Academy