Entre as estruturas de dados mais versáteis do Python, os dicionários se destacam. Eles nos ajudam a representar dados estruturados com chaves e valores, como informações de usuários, configurações de sistemas e respostas de APIs. Nesta décima aula do nosso curso de Python, vou mostrar como os dicionários funcionam, como manipulá-los e por que você deve dominá-los.
O que é um dicionário em Python?
Dicionários em Python são coleções de pares chave:valor. Eles são mutáveis, dinâmicos e não permitem chaves duplicadas. A sintaxe é simples:
dados = {"nome": "Ana", "idade": 30, "cidade": "São Paulo"}
print(dados)
# Saída: {'nome': 'Ana', 'idade': 30, 'cidade': 'São Paulo'}
Também é possível usar outros tipos como chave, desde que sejam hashable, como tuplas:
coordenadas = {(1, 2): "Ponto A", (3, 4): "Ponto B"}
print(coordenadas)
# Saída: {(1, 2): 'Ponto A', (3, 4): 'Ponto B'}
Isso é ótimo quando preciso indexar valores com coordenadas ou pares complexos.
Acessando valores e manipulando dicionários em Python
Para acessar um valor, basta usar a chave entre colchetes:
print(dados["nome"])
# Saída: Ana
Se eu tentar acessar uma chave que não existe, recebo um erro. Para evitar isso, uso o método get():
print(dados.get("email"))
# Saída: None
Esse comportamento é muito útil quando estou lidando com entradas de usuários ou dados vindos de fontes externas, onde nem sempre tenho garantia da estrutura.
Posso adicionar ou modificar pares com simplicidade:
dados["email"] = "[email protected]"
dados["idade"] = 31
print(dados)
# Saída: {'nome': 'Ana', 'idade': 31, 'cidade': 'São Paulo', 'email': '[email protected]'}
Para remover um par, o pop() é bastante direto:
dados.pop("cidade")
print(dados)
# Saída: {'nome': 'Ana', 'idade': 31, 'email': '[email protected]'}
Se quiser limpar o dicionário inteiro:
dados.clear()
print(dados)
# Saída: {}
E para copiar um dicionário sem afetar o original:
dados = {"nome": "Ana", "idade": 30}
copia = dados.copy()
print(copia)
# Saída: {'nome': 'Ana', 'idade': 30}
Iterando sobre dicionários em Python
Para percorrer um dicionário, geralmente uso o for com o método items():
for chave, valor in dados.items():
print(f"{chave}: {valor}")
# Saída:
# nome: Ana
# idade: 30
Se quero apenas as chaves ou os valores, posso usar keys() ou values():
for chave in dados.keys():
print(chave)
# Saída:
# nome
# idade
for valor in dados.values():
print(valor)
# Saída:
# Ana
# 30
E também posso verificar se uma chave existe:
if "email" in dados:
print("Chave encontrada!")
else:
print("Chave ausente!")
# Saída: Chave ausente!
Dicionários aninhados: um recurso poderoso
Dá para criar dicionários dentro de dicionários. Isso é muito comum quando lido com dados estruturados de APIs, por exemplo:
usuario = {
"nome": "Carlos",
"email": "[email protected]",
"endereço": {
"cidade": "Belo Horizonte",
"uf": "MG"
},
"permissoes": ["admin", "editor"]
}
print(usuario["endereço"]["cidade"])
# Saída: Belo Horizonte
E posso navegar por estruturas mais complexas misturando listas e dicionários:
sistema = {
"usuarios": [
{"nome": "Ana", "ativo": True},
{"nome": "João", "ativo": False}
]
}
for u in sistema["usuarios"]:
if u["ativo"]:
print(u["nome"])
# Saída:
# Ana
Boas práticas com dicionários em Python
Algumas dicas que costumo seguir:
- Sempre valido se a chave existe antes de acessar diretamente.
- Uso defaultdict do módulo collections quando preciso de valores padrão.
- Aproveito dict comprehensions para construir dicionários de forma elegante.
- Quando preciso manter a ordem de inserção, confio no comportamento padrão do Python 3.7+, que já garante isso.
Exemplo de dict comprehension:
quadrados = {x: x**2 for x in range(5)}
print(quadrados)
# Saída: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
E com defaultdict:
from collections import defaultdict
contagem = defaultdict(int)
palavras = ["python", "codigo", "python", "dicionario"]
for palavra in palavras:
contagem[palavra] += 1
print(contagem)
# Saída: defaultdict(<class 'int'>, {'python': 2, 'codigo': 1, 'dicionario': 1})
Casos de uso reais com dicionários em Python
Imagine que você está construindo uma lista de compras. Um dicionário pode te ajudar a armazenar os itens e suas quantidades:
compras = {
"maçã": 4,
"banana": 6,
"pão": 1
}
for item, quantidade in compras.items():
print(f"{item}: {quantidade}")
# Saída:
# maçã: 4
# banana: 6
# pão: 1
Se eu quiser adicionar ou atualizar a quantidade de um item:
compras["banana"] = 10
compras["leite"] = 2
print(compras)
# Saída: {'maçã': 4, 'banana': 10, 'pão': 1, 'leite': 2}
Esse é um exemplo simples, mas mostra bem como os dicionários em Python podem ser aplicados a tarefas do dia a dia de forma prática.
Conclusão
Dominar os dicionários em Python é essencial para qualquer pessoa que queira escrever código limpo, expressivo e eficiente. Eles aparecem em praticamente todo projeto que desenvolvo, seja no backend, seja em scripts para automação. Entender bem como funcionam te permite lidar melhor com JSONs, configurações e armazenamento de dados dinâmicos. Quanto mais uso Python, mais percebo que os dicionários são a base de uma programação idiomática e robusta.
Se quiser se aprofundar mais, recomendo a documentação oficial sobre dicionários.