Dicionários
Dicionários mapeiam chaves hashable para valores arbitrários com busca O(1) em média. Eles são a ferramenta padrão para registros, índices, caches e tabelas de despacho em código de aplicação Python.
Busque em todas as páginas da documentação
Dicionários mapeiam chaves hashable para valores arbitrários com busca O(1) em média. Eles são a ferramenta padrão para registros, índices, caches e tabelas de despacho em código de aplicação Python.
defaults = {"retries": 3, "timeout": 30}
overrides = {"timeout": 60}
config = defaults | overrides
for key in config:
print(key, config[key])
if "retries" not in config:
config["retries"] = 1Quando usar isso:
Counter)from collections.abc import Callable
Handler = Callable[[dict], str]
def dispatch(handlers: dict[str, Handler], event: dict) -> str:
kind = str(event.get("type", "unknown"))
handler = handlers.get(kind, handlers["unknown"])
return handler(event)
def merge_records(base: dict[str, object], patch: dict[str, object]) -> dict[str, object]:
merged = base.copy()
merged.update(patch)
return merged
def invert_unique(mapping: dict[str, int]) -> dict[int, str]:
return {value: key for key, value in mapping.items()}
if __name__ == "__main__":
handlers: dict[str, Handler] = {
"user.created": lambda e: f"create {e['id']}",
"unknown": lambda e: "noop",
}
print(dispatch(handlers, {"type": "user.created", "id": 42}))
print(merge_records({"a": 1}, {"b": 2}))O que isso demonstra:
handlers.get(kind, default) evita KeyError para eventos desconhecidosdict.copy + update mesclam registros superficialmenteCallable transformam dicionários em tabelas de despachokeys(), values(), items() são visualizações dinâmicas, não snapshots.dict.fromkeys(keys, default) cria um dicionário com o cuidado de compartilhar o valor padrão.| Sintaxe | Modifica o da esquerda? |
|---|---|
a | b | Não - novo dict (3.9+) |
a.update(b) | Sim |
{**a, **b} | Não - novo dict |
# setdefault apenas quando ausente
counts: dict[str, int] = {}
counts.setdefault("a", 0)
counts["a"] += 1
# pop com padrão
value = config.pop("missing", None)dict.fromkeys(keys, []) compartilha uma única lista. Correção: Compreensão com um novo objeto mutável.RuntimeError se o tamanho mudar durante a iteração. Correção: Use list(d) para criar um snapshot primeiro.__slots__ para registros.| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
TypedDict | Forma estática para dicionários JSON | Precisa de métodos ou validação |
dataclass | Objetos estruturados com comportamento | Precisa de JSON dict verbatim |
Modelo Pydantic | Modelos de API validados | Loop interno de alta performance |
sqlite | Índice persistente consultável | Pequeno mapa em memória |
Sim - a ordem de inserção é garantida. Reatribuir uma chave existente não muda sua posição em 3.7+ CPython (comportamento de nova inserção apenas).
Tipos imutáveis com __hash__ estável - str, int, tupla de hashables. Objetos mutáveis falham.
| retorna um novo dicionário mesclado. update modifica no local - escolha com base nas necessidades de imutabilidade.
collections.defaultdict ou setdefault - defaultdict é mais limpo para padrões de agrupamento.
sorted(d.items(), key=lambda kv: kv[1]) retorna uma lista de pares - o dicionário em si permanece conceitualmente não ordenado, mas mantém a ordem de inserção de um dicionário reatribuído.
Busca em uma pilha de dicionários sem copiar - útil para sobreposições de configuração com escopo.
copy.deepcopy quando mutáveis aninhados precisam ser independentes.
d[k] levanta KeyError quando ausente. get retorna None ou um padrão - mais seguro para chaves opcionais.
{k: f(v) for k, v in items} é idiomático para transformações com filtro if opcional.
Quando você precisa de análise de colunas (pandas/polars) ou junções relacionais em muitas linhas.
Versões da Pilha: 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