Os dicionários são uma das estruturas de dados mais poderosas e versáteis do Python. Eles armazenam dados no formato chave-valor (key-value), permitindo acesso extremamente rápido (O(1)) às informações.
🎯 O Que São Dicionários?
Um dicionário é uma coleção não ordenada de pares chave-valor. Pense nele como uma agenda telefônica: você procura o nome (chave) e encontra o número (valor).
# Criando um dicionário
pessoa = {
"nome": "Ada Lovelace",
"idade": 36,
"profissao": "Matemática",
"linguagens": ["Python", "C++", "JavaScript"]
}
# Acessando valores
print(pessoa["nome"]) # Ada Lovelace
print(pessoa["idade"]) # 36
📝 Criando Dicionários
Sintaxe Básica
# Dicionário vazio
configs = {}
configs_alt = dict()
# Dicionário com dados
produto = {
"nome": "Notebook",
"preco": 3500.00,
"estoque": 15,
"disponivel": True
}
# Com dict()
usuario = dict(nome="João", email="[email protected]", idade=25)
# Dicionário a partir de tuplas
capitais = dict([("Brasil", "Brasília"), ("Portugal", "Lisboa")])
🔍 Acessando e Modificando Dados
Acesso Seguro com .get()
pessoa = {"nome": "Maria", "idade": 30}
# Forma insegura - pode gerar erro KeyError
# print(pessoa["cidade"]) # ❌ ERRO!
# Forma segura - retorna None se não existir
cidade = pessoa.get("cidade") # None
cidade = pessoa.get("cidade", "Não informado") # Valor padrão
print(pessoa.get("nome")) # Maria
Adicionando e Modificando
carro = {
"marca": "Toyota",
"modelo": "Corolla"
}
# Adicionar nova chave
carro["ano"] = 2024
carro["cor"] = "Prata"
# Modificar valor existente
carro["marca"] = "Honda"
# Atualizar múltiplos valores
carro.update({"modelo": "Civic", "preco": 120000})
print(carro)
# {'marca': 'Honda', 'modelo': 'Civic', 'ano': 2024, 'cor': 'Prata', 'preco': 120000}
❌ Removendo Elementos
estoque = {
"maça": 50,
"banana": 30,
"laranja": 45,
"uva": 20
}
# del - remove chave específica
del estoque["uva"]
# pop() - remove e retorna o valor
quantidade = estoque.pop("banana") # 30
# pop() com valor padrão (evita erro)
limao = estoque.pop("limao", 0) # 0 (não existia)
# popitem() - remove e retorna último item (Python 3.7+)
ultimo = estoque.popitem() # ('laranja', 45)
# clear() - limpa todo o dicionário
estoque.clear() # {}
🔑 Métodos Essenciais
keys(), values() e items()
notas = {
"Alice": 9.5,
"Bob": 8.0,
"Carol": 9.8,
"David": 7.5
}
# Todas as chaves
chaves = notas.keys()
print(list(chaves)) # ['Alice', 'Bob', 'Carol', 'David']
# Todos os valores
valores = notas.values()
print(list(valores)) # [9.5, 8.0, 9.8, 7.5]
# Pares chave-valor
itens = notas.items()
print(list(itens)) # [('Alice', 9.5), ('Bob', 8.0), ...]
Verificando Existência de Chaves
dados = {"nome": "João", "idade": 25}
# Operador 'in'
if "nome" in dados:
print("Nome existe!")
if "email" not in dados:
print("Email não cadastrado")
# Usando .get() com valor padrão
email = dados.get("email", "[email protected]")
🔄 Iterando sobre Dicionários
precos = {
"arroz": 25.90,
"feijao": 8.50,
"macarrao": 4.30
}
# Iterar sobre chaves (padrão)
for produto in precos:
print(produto)
# Iterar sobre valores
for preco in precos.values():
print(f"R$ {preco:.2f}")
# Iterar sobre chave e valor
for produto, preco in precos.items():
print(f"{produto}: R$ {preco:.2f}")
# Usando .keys() explicitamente
for produto in precos.keys():
print(produto)
💡 Dictionary Comprehension
# Criar dicionário a partir de lista
numeros = [1, 2, 3, 4, 5]
quadrados = {n: n**2 for n in numeros}
# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# Com condição
pares = {n: n**2 for n in range(10) if n % 2 == 0}
# {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
# Inverter chave-valor
original = {"a": 1, "b": 2, "c": 3}
invertido = {valor: chave for chave, valor in original.items()}
# {1: 'a', 2: 'b', 3: 'c'}
# Filtrar dicionário
notas = {"Ana": 8, "Bruno": 5, "Carlos": 9, "Diana": 6}
aprovados = {nome: nota for nome, nota in notas.items() if nota >= 7}
# {'Ana': 8, 'Carlos': 9}
🏗️ Dicionários Aninhados
empresa = {
"TI": {
"funcionarios": 50,
"gerente": "Carlos Silva",
"tecnologias": ["Python", "JavaScript", "Docker"]
},
"RH": {
"funcionarios": 10,
"gerente": "Maria Santos",
"area": "Recursos Humanos"
},
"Vendas": {
"funcionarios": 30,
"gerente": "João Pedro",
"meta_mensal": 500000
}
}
# Acessar dados aninhados
print(empresa["TI"]["gerente"]) # Carlos Silva
print(empresa["TI"]["tecnologias"][0]) # Python
# Modificar dados aninhados
empresa["RH"]["funcionarios"] = 12
# Adicionar novo departamento
empresa["Marketing"] = {
"funcionarios": 15,
"gerente": "Ana Costa"
}
⚡ Performance e Complexidade
Os dicionários em Python utilizam tabelas hash internamente, o que garante:
- Acesso: O(1) - Buscar um valor por chave é quase instantâneo
- Inserção: O(1) - Adicionar novos pares é muito rápido
- Remoção: O(1) - Deletar elementos é eficiente
import time
# Comparação: lista vs dicionário
lista = list(range(1000000))
dicio = {i: i for i in range(1000000)}
# Buscar em lista: O(n) - LENTO
inicio = time.time()
999999 in lista
print(f"Lista: {time.time() - inicio:.6f}s")
# Buscar em dicionário: O(1) - RÁPIDO
inicio = time.time()
999999 in dicio
print(f"Dicionário: {time.time() - inicio:.6f}s")
🎓 Projeto Prático: Sistema de Cadastro
cadastro = {}
def adicionar_usuario(nome, email, idade):
"""Adiciona um novo usuário ao sistema"""
if email in cadastro:
print("❌ Email já cadastrado!")
return
cadastro[email] = {
"nome": nome,
"idade": idade,
"data_cadastro": "2026-02-05"
}
print(f"✅ {nome} cadastrado com sucesso!")
def buscar_usuario(email):
"""Busca um usuário pelo email"""
usuario = cadastro.get(email)
if usuario:
print(f"\n👤 Usuário encontrado:")
print(f"Nome: {usuario['nome']}")
print(f"Idade: {usuario['idade']}")
print(f"Cadastro: {usuario['data_cadastro']}")
else:
print("❌ Usuário não encontrado")
def listar_usuarios():
"""Lista todos os usuários cadastrados"""
if not cadastro:
print("📋 Nenhum usuário cadastrado")
return
print(f"\n📋 Total de usuários: {len(cadastro)}\n")
for email, dados in cadastro.items():
print(f"• {dados['nome']} ({email}) - {dados['idade']} anos")
def remover_usuario(email):
"""Remove um usuário do sistema"""
usuario = cadastro.pop(email, None)
if usuario:
print(f"🗑️ {usuario['nome']} removido com sucesso!")
else:
print("❌ Usuário não encontrado")
# Testando o sistema
adicionar_usuario("Ana Silva", "[email protected]", 28)
adicionar_usuario("Carlos Santos", "[email protected]", 35)
adicionar_usuario("Maria Oliveira", "[email protected]", 42)
listar_usuarios()
buscar_usuario("[email protected]")
remover_usuario("[email protected]")
listar_usuarios()
💡 Dicas e Boas Práticas
- ✅ Use
.get()para acesso seguro e evitar erros KeyError - ✅ Chaves devem ser imutáveis (strings, números, tuplas)
- ✅ Dicionários são ideais quando você precisa de acesso rápido por identificador
- ✅ Use dictionary comprehension para código mais limpo e pytônico
- ❌ Evite usar listas ou outros dicionários como chaves
- ❌ Não confie na ordem dos elementos em versões antigas do Python (< 3.7)
🔗 Quando Usar Dicionários?
Use dicionários quando você precisa:
- Armazenar configurações de aplicação
- Criar caches de dados
- Mapear IDs para objetos
- Contar frequência de elementos
- Agrupar dados relacionados
- Criar APIs e processar JSON
🚀 Próximos Passos
Agora que você domina dicionários, explore estruturas relacionadas:
- Listas em Python - Coleções ordenadas
- Tuplas e Sets - Outras estruturas importantes
- Curso Completo - Aprenda Python do zero ao avançado
Dicionários são fundamentais para qualquer desenvolvedor Python. Pratique bastante e você verá como eles facilitam a resolução de problemas complexos! 🎯