Tutorial do dicionário Python: métodos, exemplos e padrões comuns

  1. Início
  2. Blog
  3. Desenvolvimento de software

Desenvolvimento de Software

Tutorial do dicionário Python: Métodos, exemplos e padrões comuns

Os dicionários estão por toda parte em Python, desde respostas JSON até configuração. Aprenda como criá-los, lê-los e atualizá-los e, em seguida, escolha os padrões de contagem, agrupamento e mesclagem que você usará em projetos reais.

9 min de leitura
Tutorial do dicionário Python: métodos, exemplos e padrões comuns

Principais pontos

  • Um dicionário Python armazena pares de chave e valor e procura um valor por sua chave muito rapidamente.
  • Use get() quando uma chave estiver faltando, pois os colchetes aumentam KeyError.
  • As chaves devem ser hasháveis, como strings, números ou tuplas. Listas não podem ser chaves.
  • copy() é superficial, portanto, os dados aninhados permanecem compartilhados, a menos que você use deepcopy.

Se uma lista é uma linha de caixas numeradas, um dicionário Python é um conjunto de caixas rotuladas. Você pede o que deseja por nome em vez de posição, e é por isso que os dicionários ficam atrás de dados JSON, configuração, caches e grande parte do próprio Python.

Este tutorial começa com o básico e segue para os padrões que desenvolvedores experientes usam todos os dias. Executamos todos os exemplos no Python 3.13 e a saída mostrada vem dessa execução.

O que é um dicionário?

Um dicionário, ou dict, mapeia chaves para valores. Cada chave aparece apenas uma vez e os valores podem ser qualquer coisa, incluindo listas ou outros dicionários.

Tipo Acesso por Encomendado Duplicatas Melhor para
lista Posição Sim Permitido Sequências
tupla Posição Sim Permitido Registros fixos
definir Somente associação Não Não permitido Itens exclusivos
ditar Chave Pedido de inserção As chaves são únicas Pesquisas por nome

Desde o Python 3.7, os dicionários mantêm oficialmente a ordem de inserção. Muitos tutoriais mais antigos ainda os chamam de não ordenados, o que não é mais verdade. Para uma comparação mais ampla dos outros tipos, consulte lista Python versus tupla versus conjunto.

As pesquisas são rápidas porque os dicionários usam uma tabela hash. A verificação de uma chave leva aproximadamente o mesmo tempo, quer o dicionário contenha dez itens ou um milhão, enquanto a pesquisa em uma lista fica mais lenta à medida que ela cresce.

Crie um dicionário

user = {"name": "Asha", "age": 31, "city": "Pune"}

empty = {}
from_keywords = dict(name="Asha", age=31)
from_pairs = dict([("a", 1), ("b", 2)])

Os aparelhos encaracolados são a forma mais comum. Uma armadilha: {} cria um dicionário vazio, não um conjunto vazio. Para um conjunto vazio, você precisa de set().

Leia os valores com segurança

Existem duas maneiras de ler um valor, e a diferença é importante quando uma chave pode não existir:

user["name"]                  # 'Asha'
user["email"]                 # KeyError: 'email'

user.get("email")             # None
user.get("email", "not set")  # 'not set'

Use colchetes quando a chave precisar existir, para que uma chave ausente falhe ruidosamente. Use get() quando a ausência for normal, como um campo opcional em uma resposta da API. Para verificar uma chave, use o operador in, que analisa chaves em vez de valores:

"city" in user    # True
"Pune" in user    # False

Adicionar, atualizar e remover

Atribuir a uma chave atualiza-a, se existir, ou adiciona-a, se não existir:

user["age"] = 32
user["email"] = "asha@example.com"
print(user)

# {'name': 'Asha', 'age': 32, 'city': 'Pune', 'email': 'asha@example.com'}

Python oferece várias maneiras de remover itens:

user.pop("city")          # returns 'Pune' and removes it
user.pop("phone", None)   # no error if it is missing
del user["email"]         # removes it, and raises KeyError if missing
user.clear()              # empties the dictionary

Use pop() quando quiser o valor de volta. Passar um padrão como segundo argumento evita um erro quando a chave não está lá. popitem() remove e retorna o par adicionado mais recentemente.

Loop sobre um dicionário

O loop fornece diretamente as chaves. Para obter chaves e valores, use items():

user = {"name": "Asha", "age": 32}

for key, value in user.items():
    print(key, "=", value)

# name = Asha
# age = 32

keys(), values() e items() retornam visualizações ao vivo em vez de cópias, para que reflitam alterações posteriores. Não adicione ou remova chaves durante o loop em um dicionário, porque o Python gera um RuntimeError. Faça um loop em list(user) se precisar fazer isso.

Dica: A in verificação de um dicionário é rápida, mas "Pune" in user.values() precisa verificar todos os valores. Se você fizer isso frequentemente com dados grandes, seu dicionário poderá estar digitado de maneira errada.

Folha de referências de métodos de dicionário

Método O que isso faz
obter (k, padrão) Retorna um valor ou o padrão se a chave estiver faltando
keys() Retorna uma visão das chaves
values() Retorna uma visão dos valores
items() Retorna uma visão dos pares de chave e valor
update(other) Adiciona ou substitui de outro dicionário
pop(k, padrão) Remove uma chave e retorna seu valor
popitem() Remove e retorna o último par adicionado
definir padrão (k, v) Retorna o valor e primeiro insere v se a chave estiver faltando
copy() Retorna uma cópia superficial
clear() Remove tudo
dict.fromkeys(chaves, v) Constrói um dicionário a partir de uma lista de chaves

Mesclar dicionários

Uma necessidade comum é aplicar configurações do usuário sobre os padrões. Quando as chaves se chocam, o lado direito vence:

defaults = {"theme": "light", "lang": "en"}
saved = {"theme": "dark"}

defaults | saved
{**defaults, **saved}

# Both give: {'theme': 'dark', 'lang': 'en'}

O operador | precisa do Python 3.9 ou posterior, enquanto a versão ** também funciona em versões mais antigas. Ambos criam um novo dicionário. Por outro lado, defaults.update(saved) e defaults |= saved mudam defaults de lugar.

Compreensão e classificação

As compreensões de dicionário constroem um novo dicionário em uma única linha legível, assim como as compreensões de lista fazem para listas:

prices = {"pen": 10, "book": 250, "bag": 900}

{k: v for k, v in prices.items() if v > 100}
# {'book': 250, 'bag': 900}

Para classificar por valor, passe uma função key para sorted(). Para encontrar a chave com o maior valor, use max():

sorted(prices.items(), key=lambda item: item[1], reverse=True)
# [('bag', 900), ('book', 250), ('pen', 10)]

max(prices, key=prices.get)
# 'bag'

Um dicionário não possui método sort() e sorted() retorna uma lista de pares. Coloque o resultado em dict() se quiser um dicionário nessa ordem.

Contando e agrupando padrões

Duas tarefas surgem constantemente. A primeira é a contagem, que você pode fazer usando get() com o padrão zero:

words = "to be or not to be".split()

counts = {}
for word in words:
    counts[word] = counts.get(word, 0) + 1

print(counts)
# {'to': 2, 'be': 2, 'or': 1, 'not': 1}

A biblioteca padrão torna isso ainda mais curto com Counter:

from collections import Counter

Counter(words).most_common(2)
# [('to', 2), ('be', 2)]

O segundo é o agrupamento, e defaultdict é ideal aqui porque cria o valor que falta para você:

from collections import defaultdict

orders = [("Asha", 1200), ("Ben", 300), ("Asha", 800)]

by_customer = defaultdict(list)
for name, total in orders:
    by_customer[name].append(total)

print(dict(by_customer))
# {'Asha': [1200, 800], 'Ben': [300]}

Sem ele, você precisaria verificar se cada chave existe antes de anexar. Esses mesmos padrões funcionam bem para agregar dados de API ou linhas de log. Quando um dicionário está vazio ou uma chave está faltando, nosso guia para tratamento de exceções em Python mostra como lidar com o resultado KeyError.

Dados aninhados e a armadilha de cópia

JSON mapeia diretamente para dicionários e listas aninhados, portanto, você frequentemente encadeará chaves. O encadeamento get() mantém isso seguro quando um nível pode estar faltando:

response = {"user": {"profile": {"city": "Pune"}}}

response["user"]["profile"]["city"]               # 'Pune'
response.get("user", {}).get("settings", {}).get("theme")   # None

Tenha cuidado ao copiar dados aninhados. copy() duplica apenas o nível superior, portanto os dicionários internos permanecem compartilhados com o original:

settings = {"db": {"host": "localhost"}}

shallow = settings.copy()
shallow["db"]["host"] = "prod"

print(settings["db"]["host"])
# prod

Alterar a cópia alterou o original, o que pode ser um bug desagradável. Use copy.deepcopy(settings) para obter uma cópia totalmente independente.

O que pode ser uma chave de dicionário?

As chaves devem ser hashable, o que geralmente significa imutável. Strings, números e tuplas de valores imutáveis ​​funcionam. Listas e dicionários não:

{["a"]: 1}

# TypeError: unhashable type: 'list'

A razão é que o hash de uma chave decide onde seu valor é armazenado. Se uma chave pudesse mudar, o Python não seria mais capaz de encontrá-la. Se você precisar de uma chave composta, use uma tupla, como {("Pune", 2026): 120}.

Erros comuns

  • Usando colchetes em chaves opcionais. Use get() quando uma chave estiver ausente.
  • Assumir que get() significa que a chave existe. None pode significar que está ausente ou armazenada None. Use in quando a diferença for importante.
  • Usando um padrão mutável. dict.fromkeys(names, []) dá a cada chave a mesma lista. Em vez disso, use uma compreensão.
  • Alterando o tamanho durante a iteração. Faça um loop sobre uma cópia das chaves.
  • Usando um dict para campos conhecidos e fixos. Um dataclass pode ser mais claro e detecta erros de digitação em nomes de campos.

Considerações finais

Os dicionários recompensam um pouco de prática. Lembre-se de get() para chaves opcionais, items() para loops e Counter e defaultdict para os dois trabalhos mais comuns. Para praticar, pegue um pequeno arquivo JSON e escreva um código para contar e agrupar seus registros. Se você é novo na linguagem, comece com nosso tutorial Python para iniciantes.

Perguntas frequentes

O que é um dicionário em Python?

Um dicionário é uma coleção integrada que armazena pares de chave e valor. Você procura um valor pela sua chave, o que é rápido mesmo com uma grande quantidade de dados.

Os dicionários Python são ordenados?

Sim. Desde o Python 3.7, os dicionários garantem manter a ordem em que as chaves foram inseridas. Atualizar uma chave existente não altera sua posição.

Qual é a diferença entre get() e colchetes?

Colchetes aumentam KeyError quando uma chave está faltando. get() retorna None, ou um padrão que você fornece, portanto, é adequado para chaves opcionais.

Um dicionário pode ter chaves duplicadas?

Não. Cada chave é única. Atribuir a uma chave existente substitui seu valor e, se um literal repetir uma chave, o último valor vence.

Como faço para mesclar dois dicionários em Python?

Use um | b no Python 3.9 ou posterior, ou {**a, **b} em versões mais antigas. Ambos constroem um novo dicionário e os valores de b vencem quando as chaves entram em conflito.

Continue aprendendo

Trabalhe com Stack Quora

Precisa de ajuda com testes, WordPress ou SEO?

Ajudamos as equipes a fornecer software melhor e a expandir seus sites. Conte-nos no que você está trabalhando e sugeriremos um próximo passo claro.

Continue lendo

Mais guias sobre testes, IA e desenvolvimento moderno

Gostou deste artigo? Escolha um tópico e vá direto para nossos tutoriais mais recentes.

Inteligência artificial

Explicação das alucinações de IA: por que os modelos de linguagem inventam as coisas e como reduzi-las

Explicação das alucinações de IA: o que são, por que os modelos de linguagem as produzem, tipos comuns, como reduzi-las com aterramento e instruções…

Leia o artigo →
DevOps

Variáveis de ambiente explicadas: arquivos .env, segredos e configuração bem feitos

Variáveis de ambiente explicadas com exemplos de Python que executamos: leitura e configuração, por que cada valor é uma string, arquivos .env, hera…

Leia o artigo →
Desenvolvimento de software

Explicação da limitação de taxa de API: algoritmos, cabeçalhos e tratamento de erros 429

Limitação de taxa de API explicada com uma simulação que executamos: token bucket, janela fixa, janela deslizante, 429 respostas, cabeçalhos de limi…

Leia o artigo →
Automação de testes

Zombando em Python: unittest.mock, patch e os erros que fazem os testes mentirem

Zombaria em Python com unittest.mock, testado: Mock e return_value, side_effect, patch onde um nome é usado, especificação e autospec, zombaria de d…

Leia o artigo →
Teste de software

Cobertura de código explicada: cobertura de linha versus filial e o que 100% realmente significa

Cobertura de código explicada com uma execução cobertura.py real: cobertura de linha, ramal e condição, leitura de um relatório, por que 100% de cob…

Leia o artigo →
Bancos de dados e SQL

DELETE vs TRUNCATE vs DROP em SQL: diferenças, reversão e quando usar cada um

DELETE vs TRUNCATE vs DROP explicado com SQL testado: o que cada um remove, rollback, aciona, redefinição de identidade, velocidade e como PostgreSQ…

Leia o artigo →
Bancos de dados e SQL

Exibições SQL explicadas: crie, use e evite as armadilhas, com exemplos

Visualizações SQL explicadas com consultas que executamos: criação de uma visualização, resultados ao vivo, ocultação de colunas, desempenho, visual…

Leia o artigo →
Desenvolvimento de software

Interface TypeScript vs tipo: diferenças reais, testadas com o compilador

Interface TypeScript versus tipo, verificada com o compilador real: o que ambos podem fazer, o que apenas um pode fazer, mesclagem de declarações, e…

Leia o artigo →
Desenvolvimento de software

Python *args e **kwargs explicados: funções flexíveis com exemplos claros

Python *args e **kwargs explicados com o código que executamos: empacotamento e descompactação, ordem dos parâmetros, argumentos somente de palavras…

Leia o artigo →
Desenvolvimento de software

Funções Python Lambda: sintaxe, usos reais e quando não usá-los

Funções lambda do Python explicadas com o código que executamos: sintaxe, classificação com chave, mapa e filtro, fechamentos, armadilha de ligação …

Leia o artigo →
Inteligência artificial

O que são agentes de IA? Como eles funcionam, com um loop de agente simples que você pode executar

O que são agentes de IA? Um guia simples para o loop do agente, ferramentas, memória e proteções, com um pequeno loop Python que executamos, riscos …

Leia o artigo →
DevOps

Monitoramento versus observabilidade: a verdadeira diferença, com logs, métricas e rastreamentos

Explicação do monitoramento versus observabilidade: falhas conhecidas e desconhecidas, logs, métricas e rastreamentos, um passo a passo do incidente…

Leia o artigo →
DevOps

Docker Volumes vs Bind Mounts: persista os dados do contêiner da maneira certa

Volumes Docker versus montagens de ligação explicadas: por que os dados do contêiner desaparecem, volumes nomeados, montagens de ligação, tmpfs, exe…

Leia o artigo →
Automação de testes

TDD vs BDD: principais diferenças, um recurso criado de ambas as maneiras e quando usar cada um

TDD vs BDD explicado com um recurso de desconto construído em ambos os sentidos: refatoração vermelho-verde com o código que executamos, cenários da…

Leia o artigo →
Teste de software

Teste de aceitação do usuário (UAT): processo, lista de verificação e exemplos reais

Explicação do teste de aceitação do usuário: quem o executa, como ele difere do controle de qualidade, um processo de sete etapas, um modelo de caso…

Leia o artigo →
Bancos de dados e SQL

Valores SQL NULL explicados: IS NULL, COALESCE, NULLIF e as armadilhas a serem evitadas

Valores SQL NULL explicados com consultas que executamos: lógica de três valores, IS NULL, COALESCE, NULLIF, como agregações, junções e classificaçã…

Leia o artigo →
Bancos de dados e SQL

Instrução SQL CASE WHEN: sintaxe, exemplos reais e erros comuns

SQL CASE WHEN explicado com consultas que executamos: formulários simples e pesquisados, ordem de condição, pivôs com SUM, truques COUNT, classifica…

Leia o artigo →
Desenvolvimento de software

O que é JWT? JSON Web Tokens explicados com um exemplo prático

O que é JWT? JSON Web Tokens explicados: as três partes, um token construído e adulterado no código que executamos, JWT vs sessões, armazenamento, t…

Leia o artigo →
Desenvolvimento de software

Loop de eventos JavaScript explicado: pilha de chamadas, microtarefas e temporizadores com exemplos

O loop de eventos JavaScript explicado com o código que executamos: pilha de chamadas, filas de tarefas e microtarefas, por que setTimeout 0 não é i…

Leia o artigo →
Desenvolvimento de software

Geradores Python e rendimento explicado: economize memória com exemplos reais

Geradores Python e rendimento explicados com o código que executamos: como eles pausam e reiniciam, medem economia de memória, pipelines, sequências…

Leia o artigo →
Inteligência artificial

O que são incorporações? Similaridade de vetores e cossenos explicada de forma simples

O que são incorporações? Um guia em linguagem simples para vetores, similaridade de cossenos e pesquisa semântica, com um pequeno exemplo que execut…

Leia o artigo →
DevOps

Implantação azul-verde vs canário: diferenças, compensações e como escolher

Explicação da implantação azul-verde versus canário: como cada um funciona, custo, risco e reversão, agrupamento estável de usuários que testamos, m…

Leia o artigo →
Automação de testes

Testes instáveis: o que os causa e como corrigi-los para sempre

Testes instáveis explicados com demonstrações que executamos: as principais causas, como confirmar e diagnosticar uma, soluções adequadas para tempo…

Leia o artigo →
Teste de software

Teste de carga versus teste de estresse: diferenças, métricas e exemplos k6

Teste de carga versus teste de estresse explicado: o que cada um prova, testes de pico e absorção, as métricas que importam, por que as médias engan…

Leia o artigo →
Teste de software

Caso de teste versus cenário de teste: principais diferenças, exemplos e quando usar cada um

Caso de teste vs cenário de teste explicado: definições claras, uma tabela lado a lado, um recurso de redefinição de senha retirado de cenários para…

Leia o artigo →
Bancos de dados e SQL

Otimização de consultas SQL: leia planos de execução e corrija consultas lentas, com intervalos

Otimização de consulta SQL testada em um milhão de linhas: leia planos de execução, adicione os índices corretos, corrija filtros não sargáveis, use…

Leia o artigo →
Bancos de dados e SQL

SQL UNION vs UNION ALL: diferenças, exemplos e desempenho testado

SQL UNION vs UNION ALL explicado com consultas que executamos: duplicatas, as regras que ambos seguem, um bug de dados real, desempenho medido, INTE…

Leia o artigo →
Desenvolvimento de software

Tutorial da API JavaScript Fetch: GET, POST, tratamento de erros e tempos limite

Um tutorial da API JavaScript Fetch testado em um servidor local: GET e POST, por que 404 não lança, um auxiliar reutilizável, strings de consulta, …

Leia o artigo →
Desenvolvimento de software

Manipulação de arquivos Python: leitura, gravação, CSV, JSON e pathlib com exemplos

Manipulação de arquivos Python explicada com código que executamos: modos abertos, com, leitura de arquivos grandes, CSV, JSON, pathlib, arquivos bi…

Leia o artigo →
Desenvolvimento de software

Classes e objetos Python: tutorial OOP com exemplos reais

Classes e objetos Python explicados com código que executamos: __init__, métodos, atributos de classe vs instância, herança, propriedades, métodos d…

Leia o artigo →
Inteligência artificial

O que é um modelo de linguagem grande? Como funcionam os LLMs, explicado sem exageros

O que é um modelo de linguagem grande? LLMs explicados em linguagem simples: tokens, incorporações, atenção, treinamento, temperatura e janelas de c…

Leia o artigo →
DevOps

Comandos Linux para iniciantes: o guia essencial do terminal com exemplos

Comandos Linux para iniciantes, agrupados por tarefa: navegação, arquivos, visualização de logs, grep, pipes, permissões, processos e arquivos, com …

Leia o artigo →
Automação de testes

Selenium vs Playwright: principais diferenças, código comparado e qual escolher

Selenium vs Playwright comparado: arquitetura, espera, suporte a navegador e linguagem, depuração, o mesmo teste em ambas as ferramentas, conselhos …

Leia o artigo →
Teste de software

Particionamento de equivalência: técnica de design de teste explicada com exemplos resolvidos

Explicação do particionamento de equivalência: como encontrar partições válidas e inválidas, exemplos resolvidos para idades, senhas e cupons, teste…

Leia o artigo →
Teste de software

Gravidade vs Prioridade em Testes de Software: Diferenças, Matriz e Exemplos Reais

Explicação da gravidade versus prioridade em testes de software: definições claras, uma matriz de quatro vias com exemplos, escalas de nível, quem d…

Leia o artigo →
Bancos de dados e SQL

Tutorial de subconsultas SQL: tipos, subconsultas correlacionadas e EXISTS com exemplos

Um tutorial de subconsultas SQL com consultas que executamos: subconsultas escalares, IN, FROM e SELECT, subconsultas correlacionadas, EXISTS, a arm…

Leia o artigo →
Bancos de dados e SQL

Transações SQL e ACID explicados: COMMIT, ROLLBACK e níveis de isolamento

Transações SQL e ACID explicadas com uma transferência bancária que executamos: COMMIT, ROLLBACK, savepoints, locks, níveis de isolamento, leituras …

Leia o artigo →
Desenvolvimento de software

Folha de dicas dos comandos do Git: os comandos que você realmente usa, com exemplos

Uma folha de dicas de comandos Git agrupada por tarefa: configuração, preparação, ramificações, controles remotos, stash, histórico e desfazer erros…

Leia o artigo →
Desenvolvimento de software

Explicação das promessas de JavaScript: então, catch, Promise.all e erros comuns

Promessas JavaScript explicadas com o código que executamos: estados, cadeias then e catch, tratamento de erros, Promise.all, allSettled, race e any…

Leia o artigo →
Desenvolvimento de software

Tutorial do dicionário Python: métodos, exemplos e padrões comuns

Um tutorial de dicionário Python com código que executamos: criar, ler e atualizar dictos, métodos-chave, mesclagem, compreensão, padrões de contage…

Leia o artigo →
Inteligência artificial

O que é RAG? Geração aumentada de recuperação explicada com um exemplo prático

O que é RAG? Geração aumentada de recuperação explicada passo a passo: indexação, chunking, embeddings, recuperação, um pequeno exemplo funcional de…

Leia o artigo →
DevOps

Tutorial Terraform para iniciantes: infraestrutura como código do primeiro arquivo aos módulos

Um tutorial do Terraform para iniciantes: comece sem conta na nuvem, aprenda como iniciar, planejar e aplicar, depois variáveis, saídas, estado, mód…

Leia o artigo →
DevOps

Docker vs Kubernetes: principais diferenças, como eles funcionam juntos e o que você precisa

Docker vs Kubernetes explicado: o que cada um faz, o mesmo aplicativo rodando com ambos, Docker Compose e Swarm comparados, a mudança do dockershim …

Leia o artigo →
Automação de testes

Tutorial Pytest para iniciantes: luminárias, parametrização e exemplos reais

Um tutorial pytest para iniciantes com testes que executamos no pytest 9.2: asserções, fixtures, parametrizar, conftest, marcadores, tmp_path, monke…

Leia o artigo →
Teste de software

Ciclo de vida de teste de software (STLC): 6 fases, critérios de entrada e saída, exemplo

O ciclo de vida de teste de software explicou: seis fases do STLC com critérios de entrada e saída, resultados, um exemplo de recurso de login funci…

Leia o artigo →
Desenvolvimento de software

Git merge vs rebase: diferenças, exemplos e quando usar cada um

Git merge vs rebase explicado com saída real do log, uma tabela comparativa, a regra de ouro do rebase e um fluxo de trabalho seguro para equipes.

Leia o artigo →
Desenvolvimento de software

List comprehension em Python: sintaxe, exemplos e quando evitar

List comprehension em Python explicada: sintaxe, filtros, if-else, laços aninhados, tempos medidos e quando um laço for comum é a melhor escolha.

Leia o artigo →
Bancos de dados e SQL

SQL JOIN explicado com exemplos (Inner, Left, Right, Full)

Entenda os joins SQL passo a passo com tabelas e consultas de exemplo: INNER, LEFT, RIGHT, FULL, CROSS e SELF, além de erros comuns e dicas de desem…

Leia o artigo →