O defaultdict é uma classe da Biblioteca Collections em Python que oferece uma maneira conveniente de criar dicionários com um valor padrão para chaves que ainda não foram adicionadas. Isso simplifica a contagem de elementos ou a criação de estruturas de dados onde você precisa inicializar um valor para uma chave antes de usá-la.
**Como funciona:**
Ao criar um `defaultdict`, você especifica um tipo de dado (como `int`, `list`, `set`, etc.) como argumento. Quando você tenta acessar uma chave que não existe no dicionário, o `defaultdict` automaticamente cria essa chave e atribui a ela o valor padrão correspondente ao tipo especificado.
**Exemplo: Contagem de palavras**
```python
from collections import defaultdict
document = ["the", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"]
word_counts = defaultdict(int) # O valor padrão para novas chaves será 0 (int())
for word in document:
word_counts[word] += 1
print(word_counts)
# Output: defaultdict(<class 'int'>, {'the': 2, 'quick': 1, 'brown': 1, 'fox': 1, 'jumps': 1, 'over': 1, 'lazy': 1, 'dog': 1})
```
**Comparação com outras abordagens:**
O uso de `defaultdict` torna o código mais conciso e legível em comparação com outras abordagens para inicializar valores em dicionários:
**1. Usando `if…else`:**
```python
word_counts = {}
for word in document:
if word in word_counts:
word_counts[word] += 1
else:
word_counts[word] = 1
```
**2. Usando `try…except`:**
```python
word_counts = {}
for word in document:
try:
word_counts[word] += 1
except KeyError:
word_counts[word] = 1
```
**3. Usando `dict.get()`:**
```python
word_counts = {}
for word in document:
previous_count = word_counts.get(word, 0)
word_counts[word] = previous_count + 1
```
**Outros exemplos:**
* **Criando uma lista de valores para cada chave:**
```python
from collections import defaultdict
data = [("a", 1), ("b", 2), ("a", 3), ("c", 4), ("b", 5)]
grouped_data = defaultdict(list) # O valor padrão para novas chaves será uma lista vazia
for key, value in data:
grouped_data[key].append(value)
print(grouped_data)
# Output: defaultdict(<class 'list'>, {'a': [1, 3], 'b': [2, 5], 'c': [4]})
```
* **Criando um conjunto de valores únicos para cada chave:**
```python
from collections import defaultdict
data = [("a", 1), ("b", 2), ("a", 3), ("c", 4), ("b", 2)]
unique_data = defaultdict(set) # O valor padrão para novas chaves será um conjunto vazio
for key, value in data:
unique_data[key].add(value)
print(unique_data)
# Output: defaultdict(<class 'set'>, {'a': {1, 3}, 'b': {2}, 'c': {4}})
```
**Quando usar `defaultdict`?**
Use `defaultdict` quando você precisa inicializar automaticamente um valor padrão para novas chaves em um dicionário. Isso é especialmente útil em situações como:
* Contagem de elementos
* Agrupamento de dados
* Criação de estruturas de dados complexas
**Referência:**
* [Site da Biblioteca Collections](https://docs.python.org/3/library/collections.html)