Um dicionário é uma tabela de lookup
Listas são indexadas por posição. Dicionários são indexados por chave — geralmente uma string ou número — e cada chave mapeia para um valor. Essa mudança destranca uma categoria enorme de programas: inventários, configs, payloads JSON, perfis de usuário, caches.
As chaves e valores podem ser quase qualquer coisa. Chaves precisam ser hashable (então: números, strings, tuplas; não listas ou outros dicts). Valores não têm restrição — um dict pode conter qualquer coisa, incluindo outros dicts ou listas.
Criando dicionários
Várias formas, cada uma com seu lugar:
Lendo valores
Duas formas, e a escolha importa:
Escolha pela intenção:
- Use
[]quando a chave precisa estar lá. Se não está, é bug e você quer o erro barulhento. - Use
.get()quando "não presente" é um caso válido. Te deixa escrever defaults sem try/except.
Adicionando, atualizando, deletando
Atribuir a uma chave cria ou atualiza:
update() mescla outro dict ou iterável de pares:
Chaves compartilhadas em overrides sobrescrevem as de settings.
Checando por uma chave
in checa as chaves, não os valores:
Para checar valores especificamente, use user.values():
Como iterar um dicionário
Você tem três vistas sobre as quais pode fazer laço:
.items() é o que você pega a maior parte do tempo — te dá o par, desempacotado, pronto para usar.
A ordem de iteração no Python moderno (3.7+) bate com a ordem de inserção. Um dict não é uma "sacola mágica" — se você adiciona a, depois b, depois c, iterar te devolve nessa ordem. Essa é uma garantia da linguagem em que você pode confiar.
Como ordenar um dicionário
Dicionários preservam a ordem de inserção, então "ordenar" um dict de fato significa construir um novo dict cujas chaves são inseridas na ordem que você quer:
sorted() retorna uma lista de pares; envolver em dict(...) reconstrói um dicionário com a nova ordem. Se você só precisa dos pares ordenados (não um dict), pule a chamada externa dict().
Como mesclar dois dicionários
Python 3.9+ te dá o operador |:
Valores do dict da direita vencem em colisões de chave. .update() é o equivalente in place. Em versões antigas do Python, use {**defaults, **overrides}.
O padrão setdefault
Uma necessidade comum: "se a chave está lá, use o valor; se não, defina um default e use."
Ou, melhor, use collections.Counter:
Counter é uma subclasse de dict que faz contagem por padrão. É a escolha certa sempre que você estiver contando ocorrências.
Dict comprehensions
Paralelo a list comprehensions, mas para construir dicts:
Mesmas regras das list comprehensions, mas com chave: valor entre as chaves.
Dict como gêmeo do JSON
Dicts Python se alinham quase exatamente com objetos JSON. Converter entre os dois é uma chamada:
É por isso que dicts aparecem em todo lugar em trabalho com web — suas requisições e respostas de API são basicamente manipulação de dict com uma rede no meio.
Um exemplo prático
Um programinha parecido com config que acompanha um perfil de usuário:
Dicts aninhados, valores mutáveis, .get() com default — o kit básico para qualquer dado em formato de registro.
Seguindo em frente
Listas, tuplas, sets, dicts. Com essas quatro coleções na mão, você pode modelar quase qualquer dado que vai encontrar no começo. A seguir vamos aprender a list comprehension — o jeito compacto do Python transformar uma coleção em outra.
Perguntas frequentes
O que é um dicionário em Python?
Um dicionário é uma coleção de pares chave-valor. Você busca um valor pela chave — precos['maca'] em vez de precos[0]. Dicionários são rápidos para ler e escrever, as chaves precisam ser únicas, e no Python moderno preservam a ordem em que você inseriu os itens.
Como adiciono uma chave a um dicionário Python?
Atribua a ela: meu_dict['nova_chave'] = 'novo valor'. Se a chave já existe, o valor é sobrescrito. Se não, é adicionada. Não há distinção entre "inserir" e "atualizar" — é a mesma sintaxe.
Qual a diferença entre dict[chave] e dict.get(chave)?
dict[chave] gera KeyError se a chave não está lá. dict.get(chave) retorna None (ou um default que você fornece). Use .get() quando chaves faltando são esperadas e normais; use [chave] quando uma chave faltando é bug.