Dicionários no Python: Guia Completo

Os dicionários no Python são uma das estruturas de dados mais poderosas e versáteis da linguagem. Se você já precisou organizar informações de forma que pudesse encontrá-las rapidamente, vai adorar trabalhar com dicionários. Eles funcionam como uma agenda telefônica digital, onde você procura um nome e encontra o número correspondente instantaneamente.

Neste guia completo, vamos explorar tudo sobre dicionários em Python. Você aprenderá desde os conceitos básicos até técnicas avançadas, sempre com exemplos práticos e fáceis de entender. Não importa se você está começando agora ou já tem alguma experiência, este artigo vai ajudá-lo a dominar essa ferramenta essencial.

Também assista o vídeo abaixo do canal Curso em Vídeo do professor Gustavo Guanabara que dá uma explicação geral sobre dicionários no Python:

YouTube player

O Que São Dicionários no Python

Um dicionário é uma coleção de dados que armazena pares de chave-valor. Imagine um dicionário real: você procura uma palavra (chave) e encontra sua definição (valor). Em Python, funciona exatamente assim, mas você pode guardar qualquer tipo de informação.

Diferente de listas, que usam números para acessar elementos, dicionários usam chaves personalizadas. Isso torna o acesso aos dados muito mais intuitivo e rápido. Por exemplo, em vez de lembrar que o nome está na posição 0 e a idade na posição 1, você simplesmente usa as chaves "nome" e "idade".

Os dicionários são mutáveis, o que significa que você pode modificá-los após criá-los. Você pode adicionar novos pares, remover existentes ou alterar valores. Essa flexibilidade os torna perfeitos para representar dados do mundo real, como informações de usuários, configurações de sistemas ou inventários de produtos.

Criando Seu Primeiro Dicionário

Vamos começar criando dicionários simples. A sintaxe básica usa chaves {} com pares chave-valor separados por dois pontos:

Python

# Criando um dicionário simples
pessoa = {"nome": "Maria", "idade": 28, "cidade": "São Paulo"}
print(pessoa)

# Dicionário vazio
dicionario_vazio = {}
print(dicionario_vazio)

# Usando a função dict()
animal = dict(tipo="gato", nome="Felix", idade=3)
print(animal)
Pronto para executar

As chaves podem ser strings, números ou tuplas. Os valores podem ser qualquer tipo de dado Python: números, strings, listas, ou até outros dicionários. Essa versatilidade permite criar estruturas de dados complexas e organizadas.

Python

# Dicionário com diferentes tipos de valores
estudante = {
    "nome": "João",
    "notas": [8.5, 9.0, 7.5],
    "aprovado": True,
    "turma": 301
}
print(estudante)
Pronto para executar

Acessando Valores no Dicionário

Para acessar um valor, você usa a chave entre colchetes. É como procurar um contato no celular pelo nome:

Python

# Acessando valores
produto = {"nome": "Notebook", "preco": 3500, "estoque": 15}

print(produto["nome"])

print(produto["preco"])

# Método get() - mais seguro
print(produto.get("estoque"))

# get() com valor padrão se a chave não existir
print(produto.get("desconto", 0))
Pronto para executar

O método get() é mais seguro porque não causa erro se a chave não existir. Você pode especificar um valor padrão para retornar caso a chave não seja encontrada. Isso evita que seu programa pare de funcionar inesperadamente.

Modificando e Adicionando Elementos

Dicionários são dinâmicos. Você pode modificar valores existentes ou adicionar novos pares a qualquer momento:

Python

# Criando um dicionário inicial
carro = {"marca": "Toyota", "modelo": "Corolla", "ano": 2020}
print("Dicionário original:", carro)

# Modificando um valor existente
carro["ano"] = 2023
print("Após modificar ano:", carro)

# Adicionando novos pares
carro["cor"] = "Prata"
carro["km"] = 25000
print("Após adicionar cor e km:", carro)

# Usando update() para adicionar múltiplos pares
carro.update({"combustivel": "Flex", "portas": 4})
print("Após update:", carro)
Pronto para executar

Removendo Elementos do Dicionário

Existem várias formas de remover elementos de um dicionário. Cada método tem sua utilidade específica:

Python

# Dicionário de exemplo
livro = {
    "titulo": "Python para Iniciantes",
    "autor": "Ana Silva",
    "ano": 2023,
    "paginas": 350,
    "editora": "Tech Books"
}

# Removendo com del
del livro["editora"]
print("Após del:", livro)

# Removendo com pop() - retorna o valor removido
paginas_removidas = livro.pop("paginas")
print(f"Páginas removidas: {paginas_removidas}")
print("Após pop:", livro)

# popitem() remove o último item adicionado
ultimo_item = livro.popitem()
print(f"Último item removido: {ultimo_item}")

# clear() remove todos os elementos
livro.clear()
print("Após clear:", livro)
Pronto para executar

Métodos Importantes dos Dicionários

Os dicionários em Python possuem métodos úteis que facilitam muito o trabalho. Vamos explorar os principais:

Python

# Dicionário para demonstração
funcionario = {
    "nome": "Carlos",
    "cargo": "Desenvolvedor",
    "salario": 5000,
    "departamento": "TI"
}

# keys() - retorna todas as chaves
print("Chaves:", list(funcionario.keys()))

# values() - retorna todos os valores
print("Valores:", list(funcionario.values()))

# items() - retorna pares chave-valor
print("Itens:", list(funcionario.items()))

# copy() - cria uma cópia do dicionário
funcionario_copia = funcionario.copy()
funcionario_copia["salario"] = 6000
print("Original:", funcionario["salario"])
print("Cópia:", funcionario_copia["salario"])
Pronto para executar

Iterando Sobre Dicionários

Percorrer dicionários é uma tarefa comum. Python oferece várias formas elegantes de fazer isso:

Python

# Dicionário de exemplo
estoque = {
    "maçã": 50,
    "banana": 30,
    "laranja": 25,
    "uva": 40
}

# Iterando sobre chaves
print("Frutas disponíveis:")
for fruta in estoque:
    print(f"- {fruta}")

# Iterando sobre valores
print("\nQuantidades em estoque:")
for quantidade in estoque.values():
    print(f"  {quantidade} unidades")

# Iterando sobre chave e valor simultaneamente
print("\nEstoque completo:")
for fruta, quantidade in estoque.items():
    print(f"  {fruta}: {quantidade} unidades")
Pronto para executar

Dicionários Aninhados

Dicionários podem conter outros dicionários, criando estruturas hierárquicas. Isso é perfeito para representar dados complexos:

Python

# Dicionário aninhado
escola = {
    "turma_A": {
        "professor": "João Silva",
        "alunos": 25,
        "sala": 101
    },
    "turma_B": {
        "professor": "Maria Santos",
        "alunos": 28,
        "sala": 102
    },
    "turma_C": {
        "professor": "Pedro Costa",
        "alunos": 22,
        "sala": 103
    }
}

# Acessando dados aninhados
print("Professor da Turma B:", escola["turma_B"]["professor"])

# Modificando dados aninhados
escola["turma_A"]["alunos"] = 26
print("Alunos na Turma A após modificação:", escola["turma_A"]["alunos"])

# Adicionando nova informação em dicionário aninhado
escola["turma_C"]["horario"] = "Manhã"
print("Turma C completa:", escola["turma_C"])
Pronto para executar

Compreensão de Dicionários

A compreensão de dicionários é uma forma concisa e elegante de criar dicionários. É similar à compreensão de listas, mas para dicionários:

Python

# Criando um dicionário com compreensão
numeros_quadrados = {x: x**2 for x in range(1, 6)}
print("Quadrados:", numeros_quadrados)

# Filtrando com condição
pares_quadrados = {x: x**2 for x in range(1, 11) if x % 2 == 0}
print("Quadrados dos pares:", pares_quadrados)

# Convertendo lista em dicionário
frutas = ["maçã", "banana", "laranja"]
frutas_numeradas = {i+1: fruta for i, fruta in enumerate(frutas)}
print("Frutas numeradas:", frutas_numeradas)

# Invertendo chave e valor
original = {"a": 1, "b": 2, "c": 3}
invertido = {valor: chave for chave, valor in original.items()}
print("Dicionário invertido:", invertido)
Pronto para executar

Verificando a Existência de Chaves

Antes de acessar um valor, é importante verificar se a chave existe. Isso evita erros no seu programa:

Python

# Dicionário de exemplo
usuario = {
    "nome": "Ana",
    "email": "ana@email.com",
    "ativo": True
}

# Verificando com 'in'
if "email" in usuario:
    print(f"Email encontrado: {usuario['email']}")
else:
    print("Email não cadastrado")

# Verificando se chave NÃO existe
if "telefone" not in usuario:
    print("Telefone não cadastrado")
    usuario["telefone"] = "11-99999-9999"
    print(f"Telefone adicionado: {usuario['telefone']}")

# Usando get() com valor padrão
idade = usuario.get("idade", "Não informada")
print(f"Idade: {idade}")
Pronto para executar

Mesclando Dicionários

Combinar dicionários é uma operação comum. Python oferece várias maneiras de fazer isso:

Python

# Dicionários para mesclar
config_padrao = {
    "servidor": "localhost",
    "porta": 8080,
    "debug": False
}

config_usuario = {
    "porta": 3000,
    "debug": True,
    "banco_dados": "MySQL"
}

# Método update() - modifica o original
config_final = config_padrao.copy()
config_final.update(config_usuario)
print("Config final com update:", config_final)

# Operador | (Python 3.9+)
config_mesclada = config_padrao | config_usuario
print("Config com operador |:", config_mesclada)

# Desempacotamento com ** 
config_completa = {**config_padrao, **config_usuario}
print("Config com desempacotamento:", config_completa)
Pronto para executar

Ordenando Dicionários

Embora dicionários mantenham a ordem de inserção desde Python 3.7, às vezes precisamos reorganizá-los:

Python

# Dicionário desordenado
vendas = {
    "março": 15000,
    "janeiro": 12000,
    "abril": 18000,
    "fevereiro": 13500
}

# Ordenando por chave
vendas_por_mes = dict(sorted(vendas.items()))
print("Ordenado por mês:", vendas_por_mes)

# Ordenando por valor
vendas_por_valor = dict(sorted(vendas.items(), key=lambda x: x[1]))
print("Ordenado por valor:", vendas_por_valor)

# Ordem reversa
vendas_decrescente = dict(sorted(vendas.items(), key=lambda x: x[1], reverse=True))
print("Maior para menor:", vendas_decrescente)
Pronto para executar

Aplicações Práticas de Dicionários

Vamos ver exemplos reais de como dicionários são usados no dia a dia da programação:

Sistema de Cadastro de Produtos

Python

# Cadastro de produtos em uma loja
produtos = {
    "PRD001": {
        "nome": "Mouse Wireless",
        "preco": 45.90,
        "estoque": 150,
        "categoria": "Periféricos"
    },
    "PRD002": {
        "nome": "Teclado Mecânico",
        "preco": 289.90,
        "estoque": 45,
        "categoria": "Periféricos"
    }
}

# Função para adicionar produto
def adicionar_produto(codigo, nome, preco, estoque, categoria):
    produtos[codigo] = {
        "nome": nome,
        "preco": preco,
        "estoque": estoque,
        "categoria": categoria
    }
    print(f"Produto {nome} adicionado com sucesso!")

# Adicionando novo produto
adicionar_produto("PRD003", "Webcam HD", 199.90, 30, "Periféricos")

# Verificando o catálogo
print(f"Total de produtos: {len(produtos)}")
Pronto para executar

Contador de Palavras

Python

# Contando frequência de palavras
texto = "o gato subiu no telhado o gato desceu do telhado"
palavras = texto.split()

contador = {}
for palavra in palavras:
    if palavra in contador:
        contador[palavra] += 1
    else:
        contador[palavra] = 1

print("Frequência das palavras:")
for palavra, freq in contador.items():
    print(f"  '{palavra}': {freq} vez(es)")
Pronto para executar

Agenda de Contatos

Python

# Sistema simples de agenda
agenda = {}

def adicionar_contato(nome, telefone, email):
    agenda[nome] = {
        "telefone": telefone,
        "email": email
    }
    print(f"Contato {nome} adicionado!")

def buscar_contato(nome):
    if nome in agenda:
        contato = agenda[nome]
        print(f"\nContato: {nome}")
        print(f"Telefone: {contato['telefone']}")
        print(f"Email: {contato['email']}")
    else:
        print(f"Contato {nome} não encontrado")

# Usando a agenda
adicionar_contato("João Silva", "11-98765-4321", "joao@email.com")
adicionar_contato("Maria Santos", "11-91234-5678", "maria@email.com")
buscar_contato("João Silva")
Pronto para executar

Dicionários vs Outras Estruturas de Dados

É importante entender quando usar dicionários em vez de outras estruturas:

CaracterísticaDicionárioListaTuplaSet
Acesso por índiceNãoSimSimNão
Acesso por chaveSimNãoNãoNão
MutávelSimSimNãoSim
OrdenadoSim (3.7+)SimSimNão
Permite duplicatasNão (chaves)SimSimNão
Velocidade de buscaMuito rápidaLentaLentaMuito rápida

Dica importante: Use dicionários quando precisar associar valores a chaves únicas e fazer buscas rápidas. Use listas quando a ordem importar e você precisar de índices numéricos.

Boas Práticas com Dicionários

Para escrever código Python eficiente e legível com dicionários, siga estas recomendações:

Use Nomes Descritivos

Python

# Ruim
d = {"n": "João", "i": 25}

# Bom
pessoa = {"nome": "João", "idade": 25}
Pronto para executar

Prefira get() para Acesso Seguro

Python

# Pode causar erro
# valor = config["opcao_inexistente"]

# Seguro
valor = config.get("opcao_inexistente", "valor_padrao")
Pronto para executar

Use setdefault() para Valores Padrão

Python

# Forma longa
if "contador" not in dados:
    dados["contador"] = 0
dados["contador"] += 1

# Forma elegante
dados.setdefault("contador", 0)
dados["contador"] += 1
Pronto para executar

Tratamento de Erros com Dicionários

Lidar com erros é essencial para criar programas robustos:

Python

# Dicionário de teste
config = {"servidor": "localhost", "porta": 8080}

# Tratamento com try/except
try:
    senha = config["senha"]
except KeyError:
    print("Senha não configurada, usando padrão")
    senha = "admin123"

# Usando get() com validação
timeout = config.get("timeout")
if timeout is None:
    print("Timeout não definido, usando 30 segundos")
    timeout = 30

# Verificação antes do acesso
if "debug" in config:
    debug_mode = config["debug"]
else:
    debug_mode = False
    print(f"Modo debug: {debug_mode}")
Pronto para executar

Performance e Otimização

Dicionários em Python são implementados como hash tables, tornando as operações de busca extremamente rápidas. O tempo médio para encontrar, inserir ou deletar um item é O(1), independente do tamanho do dicionário.

Para otimizar o uso de memória com dicionários grandes, considere usar __slots__ em classes ou estruturas de dados especializadas como collections.ChainMap ou collections.defaultdict:

Python

from collections import defaultdict

# defaultdict evita verificações de existência
contador = defaultdict(int)
palavras = ["python", "java", "python", "javascript", "python"]

for palavra in palavras:
    contador[palavra] += 1  # Não precisa verificar se existe

print(dict(contador))
Pronto para executar

Conclusão

Os dicionários em Python são ferramentas fundamentais que todo programador deve dominar. Eles oferecem uma forma eficiente e intuitiva de organizar e acessar dados através de pares chave-valor. Desde operações básicas como criar e modificar elementos até técnicas avançadas como compreensão de dicionários e estruturas aninhadas, você agora tem o conhecimento necessário para usar dicionários com confiança.

Lembre-se de que dicionários são ideais quando você precisa de acesso rápido a dados através de chaves únicas. Eles são perfeitos para representar objetos do mundo real, configurações de sistemas, caches de dados e muitas outras aplicações. A combinação de flexibilidade, performance e sintaxe clara torna os dicionários uma escolha excelente para a maioria dos problemas de programação.

Continue praticando com exemplos reais e experimente combinar dicionários com outras estruturas de dados Python. Com o tempo, você desenvolverá a intuição para saber exatamente quando e como usar dicionários para resolver problemas de forma elegante e eficiente. O domínio dessa estrutura de dados abrirá novas possibilidades em seus projetos Python e tornará seu código mais profissional e maintível.

FAQ - Perguntas Frequentes sobre Dicionários em Python

1. O que é um dicionário em Python?

O dicionário no Python armazena dados em pares chave-valor, permitindo acesso rápido e organização intuitiva.

2. Qual a diferença entre um dicionário e uma lista?

As listas usam índices e mantêm ordem e os dicionários usam chaves personalizadas e permitem buscas rápidas e associações descritivas.

3. Que tipos de dados posso usar como chaves?

Chaves em dicionários devem ser imutáveis, como strings, números ou tuplas. Listas e objetos mutáveis não podem ser usadas.

4. Posso ter chaves duplicadas em um dicionário?

Não, cada chave em um dicionário deve ser única. Chaves repetidas substituem valores, mas valores duplicados são permitidos.

5. Como verifico se uma chave existe no dicionário?

Para verificar chaves em dicionários, use in ou get(), que permite definir um valor padrão se a chave não existir.

6. O que acontece se eu tentar acessar uma chave inexistente?

Acessar uma chave inexistente com colchetes gera KeyError. Use in ou get() para evitar erros no programa.

7. Dicionários mantêm a ordem dos elementos?

Sim, desde o Python 3.7, dicionários mantêm a ordem de inserção, garantindo que os itens apareçam na sequência adicionada.

8. Qual a vantagem de usar dicionários?

Dicionários oferecem acesso rápido, uso de chaves descritivas e são ideais para mapeamentos e estruturas complexas.

Compartilhe:

Artigos recentes

Conteúdo do artigo

    Comece a Aprender Python Hoje!

    © Academify 2020-2025. Todos os direitos reservados.

    Conheça o Nosso Curso

    de

    Completo!

    Aprenda Python de forma prática e comece a criar seus próprios projetos desde as primeiras aulas. Um curso completo, do básico ao avançado