Menu

Dicionários em Python: criar, acessar, atualizar e iterar dict

Dicionários são a estrutura de lookup chave-valor do Python — o tipo de dado que você vai usar constantemente depois do básico.

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.

main.py
Output
Click Run to see the output here.

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:

main.py
Output
Click Run to see the output here.

Lendo valores

Duas formas, e a escolha importa:

main.py
Output
Click Run to see the output here.

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:

main.py
Output
Click Run to see the output here.

update() mescla outro dict ou iterável de pares:

main.py
Output
Click Run to see the output here.

Chaves compartilhadas em overrides sobrescrevem as de settings.

Checando por uma chave

in checa as chaves, não os valores:

main.py
Output
Click Run to see the output here.

Para checar valores especificamente, use user.values():

main.py
Output
Click Run to see the output here.

Como iterar um dicionário

Você tem três vistas sobre as quais pode fazer laço:

main.py
Output
Click Run to see the output here.

.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:

main.py
Output
Click Run to see the output here.

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 |:

main.py
Output
Click Run to see the output here.

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."

main.py
Output
Click Run to see the output here.

Ou, melhor, use collections.Counter:

main.py
Output
Click Run to see the output here.

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:

main.py
Output
Click Run to see the output here.

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:

main.py
Output
Click Run to see the output here.

É 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:

main.py
Output
Click Run to see the output here.

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.

Aprenda a programar com o Coddy

COMEÇAR