Dicionarios em Python: Como Usar e Quando Escolher

6 min de leitura Atualizado em 27 Apr 2026

O que sao Dicionarios em Python?

Dicionarios sao a segunda estrutura de dados mais importante em Python, atras apenas das listas. Eles armazenam pares chave-valor e oferecem acesso extremamente rapido — busca, insercao e remocao em tempo O(1) na media, gracas a implementacao interna com hash tables.

Dicionarios sao ideais quando voce precisa associar dados a identificadores unicos: usuarios por ID, configuracoes por nome, contagem de palavras, cache de resultados e muito mais.


Criando Dicionarios

# Dicionario vazio
vazio = {}
vazio2 = dict()

# Dicionario com dados
pessoa = {
    "nome": "Ana",
    "idade": 28,
    "cidade": "Sao Paulo",
    "linguagens": ["Python", "JavaScript"]
}

# A partir de lista de tuplas
pares = dict([("a", 1), ("b", 2), ("c", 3)])

# Com dict()
config = dict(host="localhost", porta=5432, debug=True)

# Dict comprehension
quadrados = {x: x ** 2 for x in range(1, 6)}
# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

As chaves devem ser imutaveis (strings, numeros, tuplas). Valores podem ser qualquer tipo. Para entender melhor tipos de dados, veja nosso artigo sobre estruturas de dados Python.


Operacoes CRUD (Criar, Ler, Atualizar, Deletar)

Leitura

pessoa = {"nome": "Ana", "idade": 28, "cidade": "SP"}

# Acesso direto — levanta KeyError se nao existir
print(pessoa["nome"])  # "Ana"

# Acesso seguro com get — retorna None ou valor padrao
print(pessoa.get("email"))           # None
print(pessoa.get("email", "N/A"))    # "N/A"

# Verificar se chave existe
if "idade" in pessoa:
    print(f"Idade: {pessoa['idade']}")

Criacao e Atualizacao

pessoa = {"nome": "Ana", "idade": 28}

# Adicionar/atualizar valor
pessoa["email"] = "ana@email.com"
pessoa["idade"] = 29

# Atualizar multiplos valores
pessoa.update({"cidade": "RJ", "cargo": "Dev Python"})

# setdefault — define valor apenas se chave nao existir
pessoa.setdefault("pais", "Brasil")   # Adiciona
pessoa.setdefault("nome", "Carlos")   # Nao altera (ja existe)

Remocao

pessoa = {"nome": "Ana", "idade": 28, "cidade": "SP", "email": "ana@email.com"}

# Remover e retornar valor
email = pessoa.pop("email")
# "ana@email.com"

# Remover com valor padrao (sem erro se nao existir)
fone = pessoa.pop("telefone", "Nao informado")

# Remover ultimo par inserido
ultimo_par = pessoa.popitem()

# Remover por chave
del pessoa["cidade"]

# Limpar tudo
pessoa.clear()

Iterando sobre Dicionarios

config = {"host": "localhost", "porta": 5432, "db": "app_prod"}

# Iterar sobre chaves (padrao)
for chave in config:
    print(chave)

# Iterar sobre valores
for valor in config.values():
    print(valor)

# Iterar sobre pares chave-valor
for chave, valor in config.items():
    print(f"{chave} = {valor}")

# Dict comprehension com filtro
grandes = {k: v for k, v in config.items() if isinstance(v, int) and v > 100}

Para mais sobre iteracao em Python, confira nosso artigo sobre geradores e iteradores.


Dict Comprehension

Assim como list comprehension para listas, dict comprehension cria dicionarios de forma concisa:

# Inverter chave e valor
original = {"a": 1, "b": 2, "c": 3}
invertido = {v: k for k, v in original.items()}
# {1: "a", 2: "b", 3: "c"}

# Filtrar items
notas = {"Ana": 8.5, "Carlos": 6.0, "Maria": 9.2, "Pedro": 4.5}
aprovados = {nome: nota for nome, nota in notas.items() if nota >= 7.0}
# {"Ana": 8.5, "Maria": 9.2}

# Transformar valores
precos_usd = {"camiseta": 20, "calcado": 80, "jaqueta": 150}
precos_brl = {item: preco * 5.2 for item, preco in precos_usd.items()}

# A partir de duas listas
chaves = ["nome", "idade", "cidade"]
valores = ["Ana", 28, "SP"]
pessoa = dict(zip(chaves, valores))

collections: defaultdict, Counter e OrderedDict

O modulo collections oferece variantes poderosas de dicionarios:

defaultdict

from collections import defaultdict

# Agrupar items sem verificacao manual
palavras = ["python", "java", "python", "go", "python", "java"]

# Sem defaultdict (verboso)
contagem = {}
for p in palavras:
    if p not in contagem:
        contagem[p] = 0
    contagem[p] += 1

# Com defaultdict (limpo)
contagem = defaultdict(int)
for p in palavras:
    contagem[p] += 1
# defaultdict(int, {'python': 3, 'java': 2, 'go': 1})

# Agrupar em listas
alunos = [("Python", "Ana"), ("Java", "Carlos"), ("Python", "Maria")]
turmas = defaultdict(list)
for curso, aluno in alunos:
    turmas[curso].append(aluno)
# {'Python': ['Ana', 'Maria'], 'Java': ['Carlos']}

Counter

from collections import Counter

# Contar elementos
texto = "abracadabra"
contagem = Counter(texto)
# Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})

# Top N mais comuns
print(contagem.most_common(3))
# [('a', 5), ('b', 2), ('r', 2)]

# Operacoes entre Counters
vendas_jan = Counter({"produto_a": 50, "produto_b": 30})
vendas_fev = Counter({"produto_a": 40, "produto_b": 60})
total = vendas_jan + vendas_fev
# Counter({'produto_b': 90, 'produto_a': 90})

OrderedDict

from collections import OrderedDict

# Util quando a ordem importa para comparacao
d1 = OrderedDict([("a", 1), ("b", 2)])
d2 = OrderedDict([("b", 2), ("a", 1)])
print(d1 == d2)  # False (ordem diferente)

# Com dict normal, ordem nao afeta igualdade
print({"a": 1, "b": 2} == {"b": 2, "a": 1})  # True

Como Hash Tables Funcionam

Dicionarios Python sao implementados como hash tables. Entender isso ajuda a escrever codigo mais eficiente:

  1. Funcao hash: Quando voce insere d["chave"] = valor, Python calcula hash("chave") para determinar onde armazenar o par
  2. Indice do array: O hash e convertido em um indice de um array interno
  3. Colisoes: Quando duas chaves geram o mesmo indice, Python usa probing (open addressing) para encontrar o proximo slot vazio
  4. Redimensionamento: Quando o array fica 2/3 cheio, Python cria um novo array maior e redistribui todos os pares
# Apenas tipos hashaveis podem ser chaves
print(hash("texto"))     # Funciona
print(hash(42))          # Funciona
print(hash((1, 2, 3)))   # Funciona (tupla e imutavel)
# hash([1, 2, 3])        # TypeError! Listas sao mutaveis

Complexidade de Operacoes

OperacaoMediaPior Caso
Busca por chaveO(1)O(n)
InsercaoO(1)O(n)
RemocaoO(1)O(n)
IteracaoO(n)O(n)

O pior caso O(n) so acontece quando muitas chaves colidem — extremamente raro na pratica.


Quando Usar Dicionarios vs Outras Estruturas

CenarioMelhor Estrutura
Colecao ordenada com indiceLista
Busca rapida por chaveDicionario
Verificar pertencimentoSet
Dados imutaveisTupla
Contagem de elementosCounter
Fila/pilhadeque
Busca em dados ordenadosbisect

Para uma visao completa de quando usar cada estrutura, confira nosso artigo sobre estruturas de dados.


Padroes Comuns com Dicionarios

Merge de Dicionarios (Python 3.9+)

config_padrao = {"tema": "claro", "idioma": "pt-br", "debug": False}
config_usuario = {"tema": "escuro", "fonte": 16}

# Operador merge (Python 3.9+)
config_final = config_padrao | config_usuario
# {"tema": "escuro", "idioma": "pt-br", "debug": False, "fonte": 16}

# Merge in-place
config_padrao |= config_usuario

Dicionario como Switch/Match

def calcular(a, b, operacao):
    operacoes = {
        "soma": lambda: a + b,
        "subtracao": lambda: a - b,
        "multiplicacao": lambda: a * b,
        "divisao": lambda: a / b if b != 0 else "Erro: divisao por zero"
    }
    return operacoes.get(operacao, lambda: "Operacao invalida")()

print(calcular(10, 3, "soma"))  # 13

Para alternativas modernas, veja nosso artigo sobre pattern matching com match/case.


Boas Praticas

  1. Use .get() para acessos seguros — evita KeyError
  2. Prefira defaultdict quando precisa de valores padrao
  3. Use dict comprehension para transformacoes — e mais legivel que loops
  4. Evite chaves mutaveis — listas e dicts nao podem ser chaves
  5. Use Counter para contagens — nao reinvente a roda
  6. Considere dataclasses quando o dict tem estrutura fixa

Conclusao

Dicionarios sao indispensaveis em Python. Sua busca O(1), flexibilidade e as poderosas extensoes do modulo collections fazem deles a escolha certa para inumeros problemas. Domine dicionarios e voce estara pronto para enfrentar desafios reais de programacao.

Continue sua jornada em algoritmos e estruturas de dados: listas, ordenacao, busca binaria e pilhas e filas.

Confira tambem nossas vagas Python e veja como empresas brasileiras como Mercado Livre e Itau usam Python no dia a dia.

Explore tambem nossos sites sobre outras linguagens: Go, Rust e Kotlin.