collections.defaultdict în Python

Modulul collections Python 3.0+

Un dicționar care creează automat o valoare implicită pentru cheile lipsă.

Sintaxă
from collections import defaultdict
d = defaultdict(fabrica_valori)

Ce face collections.defaultdict

defaultdict(f) se comportă ca un dicționar obișnuit, cu o diferență: când citești o cheie care nu există, apelează f(), salvează rezultatul la acea cheie și îl returnează. Cu list obții liste goale, cu int zero, cu set mulțimi goale.

Este forma cea mai curată pentru grupare și numărare. Atributul default_factory păstrează funcția; dacă îl setezi la None, dicționarul se comportă iar normal (dă KeyError).

Parametri

Parametru Descriere
default_factory Funcția (fără argumente) care produce valoarea implicită: list, int, set, un lambda.

Ce returnează

Un obiect defaultdict (subclasă a lui dict).

Exemple

Exemplul 1: Grupare și numărare

from collections import defaultdict
elevi = [("9A", "Ana"), ("9B", "Dan"), ("9A", "Ioana"), ("9B", "Mihai"), ("9A", "Elena")]
pe_clase = defaultdict(list)
for clasa, nume in elevi:
    pe_clase[clasa].append(nume)
print(dict(pe_clase))

litere = defaultdict(int)
for c in "banana":
    litere[c] += 1
print(dict(litere))

Rezultat

{'9A': ['Ana', 'Ioana', 'Elena'], '9B': ['Dan', 'Mihai']}
{'b': 1, 'a': 3, 'n': 2}

Exemplul 2: Citirea creează cheia

from collections import defaultdict
d = defaultdict(lambda: "necunoscut")
print(d["oras"])
print(dict(d))
print("tara" in d, d.get("tara"))

Rezultat

necunoscut
{'oras': 'necunoscut'}
False None

Greșeli frecvente

  • Verifici existența cu d[cheie] și, fără să vrei, adaugi cheia. Folosește cheie in d sau d.get(cheie), care nu creează nimic.
  • Scrii defaultdict([]) în loc de defaultdict(list): argumentul trebuie să fie o funcție, nu o valoare.

Comenzi înrudite

  • dict.setdefault(): Returnează valoarea unei chei; dacă cheia lipsește, o adaugă mai întâi cu o valoare implicită.
  • collections.Counter: Un dicționar specializat care numără de câte ori apare fiecare valoare.
  • dict.get(): Citește valoarea unei chei; dacă cheia lipsește, returnează o valoare implicită în loc de eroare.