Módulo collections
O módulo collections estende os contêineres embutidos com tipos especializados ajustados para padrões comuns - agrupamento, contagem, filas de duas pontas e configuração em camadas.
Busque em todas as páginas da documentação
O módulo collections estende os contêineres embutidos com tipos especializados ajustados para padrões comuns - agrupamento, contagem, filas de duas pontas e configuração em camadas.
from collections import Counter, defaultdict, deque
words = Counter("abracadabra".split())
by_len: defaultdict[int, list[str]] = defaultdict(list)
queue: deque[str] = deque(maxlen=100)Quando usar:
if key not in dictChainMapfrom collections import ChainMap, Counter, defaultdict, deque
def group_by(items: list[dict], field: str) -> dict[str, list[dict]]:
groups: defaultdict[str, list[dict]] = defaultdict(list)
for item in items:
groups[str(item[field])].append(item)
return dict(groups)
def top_n_words(text: str, n: int) -> list[tuple[str, int]]:
counts = Counter(word.lower() for word in text.split())
return counts.most_common(n)
def sliding_window(values: list[int], size: int) -> list[int]:
window: deque[int] = deque(maxlen=size)
sums: list[int] = []
for v in values:
window.append(v)
if len(window) == size:
sums.append(sum(window))
return sums
def merged_config(*maps: dict[str, object]) -> ChainMap:
return ChainMap(*maps)
if __name__ == "__main__":
rows = [{"role": "dev", "name": "a"}, {"role": "dev", "name": "b"}]
print(group_by(rows, "role"))
print(top_n_words("a b a c a b", 2))
print(sliding_window([1, 2, 3, 4, 5], 3))O que isso demonstra:
defaultdict(list) anexa sem verificações de existênciaCounter.most_common retorna pares classificadosdeque(maxlen=...) remove automaticamente os itens mais antigos para janelas de rolagemChainMap pesquisa a pilha de dicts para a primeira chave correspondente__missing__.+, -, &, |.move_to_end.| Tipo | Uso |
|---|---|
deque | Fila, pilha, janela de rolagem |
Counter | Contagens de palavras, histogramas |
defaultdict | Agrupamento por, listas de adjacência |
ChainMap | Camadas de configurações com escopo |
# Counter como multiconjunto
c1 = Counter(a=3, b=1)
c2 = Counter(a=1, c=2)
print(c1 + c2)
# move_to_end em OrderedDict para ordenação estilo LRUlist, int, set simples.subtract com conhecimento ou filtre os positivos.move_to_end.| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
dict simples | Mapas simples | Boilerplate repetitivo de chave ausente |
pandas.value_counts | Colunas de DataFrame | Script apenas com biblioteca padrão |
heapq | Ordenação por prioridade | Apenas fila FIFO |
functools.lru_cache | Memoização de função | Contagem de iteráveis arbitrários |
Em grande parte - o dict regular preserva a ordem de inserção. Mantenha OrderedDict para comportamentos LRU de move_to_end.
defaultdict é mais limpo para acumulação. setdefault é bom para chaves ausentes ocasionais.
Sim, se forem hashable. Frequentemente conta strings ou tuplas extraídas de registros.
Append/pop são thread-safe no CPython devido ao GIL; ainda coordene operações compostas entre threads.
ChainMap(os.environ, defaults) - o ambiente substitui os padrões sem cópia.
Usa heap para top-n - eficiente quando n << chaves únicas.
Moveu-se para typing.NamedTuple e dataclasses - ainda disponível como collections.namedtuple.
Expande contagens para itens repetidos - útil para realimentar o multiconjunto em algoritmos.
Nunca use list.pop(0) em loops intensos - O(n). Sempre use deque.popleft().
Converta para dict simples primeiro: dict(dd) - a fábrica não é preservada em JSON naturalmente.
Versões do Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026