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ștecheie in dsaud.get(cheie), care nu creează nimic. - Scrii
defaultdict([])în loc dedefaultdict(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.