Manipulando Dicionários em Python

Os dicionários em Python são estruturas de dados extremamente versáteis e fundamentais para a organização de informações. Diferentemente de listas, que armazenam dados por uma ordem sequencial de índices numéricos, os dicionários utilizam um sistema de pares chave-valor, onde cada valor é associado a uma chave única. Essa característica os torna ideais para representar coleções de dados onde cada item tem um identificador específico, análogo aos objetos JSON ou hash maps em outras linguagens.

Conceitos Básicos e Criação

Um dicionário é uma coleção não ordenada de pares chave-valor. As chaves devem ser imutáveis (strings, números, tuplas) e únicas, enquanto os valores podem ser de qualquer tipo de dado Python. Podemos criar dicionários vazios ou preenchidos com dados iniciais.

Para criar um dicionário vazio, utiliza-se chaves encaracoladas vazias {}:

configuracao_servidor = {}
print(f"Dicionário vazio: {configuracao_servidor}")

Para criar um dicionário com pares chave-valor iniciais, basta listar os pares dentro das chaves, separando-os por vírgulas:

detalhes_produto = {
    "nome": "Smartphone X10",
    "marca": "TechCorp",
    "preco": 999.99,
    "em_estoque": True
}
print(f"Dicionário inicial: {detalhes_produto}")

Operações Fundamentais com Dicionários

Acessando Valores

O acesso aos valores em um dicionário é feito através de suas chaves, utilizando colchetes []. Se a chave não existir, ocorrerá um erro KeyError. Para evitar isso, pode-se usar o método .get(), que retorna None (ou um valor padrão especificado) se a chave não for encontrada.

print(f"Nome do produto: {detalhes_produto['nome']}")
print(f"Preço do produto: {detalhes_produto.get('preco')}")

# Tentativa de acesso a uma chave inexistente
# print(detalhes_produto['modelo']) # Isso causaria um KeyError

# Usando .get() para chaves inexistentes
modelo = detalhes_produto.get('modelo', 'Não especificado')
print(f"Modelo do produto: {modelo}")

Adicionando e Modificando Pares Chave-Valor

Dicionários são mutáveis, o que significa que podemos adicionar novos pares ou alterar valores existentes a qualquer momento. A atribuição é o mecanismo para ambas as operações:

  • Se a chave já existe, seu valor é atualizdao.
  • Se a chave não existe, um novo par chave-valor é adicionado.
# Adicionando um novo atributo
detalhes_produto["sku"] = "TC-X10-2023"
print(f"Após adicionar SKU: {detalhes_produto}")

# Modificando um valor existente
detalhes_produto["preco"] = 899.99
print(f"Após ajustar preço: {detalhes_produto}")

# Adicionando uma lista como valor
detalhes_produto["cores_disponiveis"] = ["Preto", "Azul", "Branco"]
print(f"Após adicionar cores: {detalhes_produto}")

Removendo Pares Chave-Valor

Para remover um par chave-valor específico, podemos usar a instrução del. Alternativamente, o método .pop() remove o item e retorna seu valor, o que pode ser útil em algumas situações.

# Removendo um atributo com del
del detalhes_produto["em_estoque"]
print(f"Após remover 'em_estoque': {detalhes_produto}")

# Removendo um atributo com pop() e capturando o valor
sku_removido = detalhes_produto.pop("sku")
print(f"SKU removido: {sku_removido}")
print(f"Após remover 'sku' com pop: {detalhes_produto}")

# pop() também pode receber um valor padrão para chaves inexistentes
# print(detalhes_produto.pop('garantia')) # Isso causaria um KeyError
garantia = detalhes_produto.pop('garantia', 'Informação de garantia não encontrada')
print(f"Info garantia: {garantia}")

Iterando Sobre Dicionários

A iteração é uma operação comum para processar todos os itens em um dicionário. Python oferece várias maneiras de percorrer os elementos de um dicionário.

Iterando Chave e Valor (Itens)

O método .items() retorna uma visão dos pares chave-valor do dicionário. É a forma mais comum de iterar sobre ambos.

configuracoes_usuario = {
    "nome_usuario": "alice99",
    "idioma": "pt-BR",
    "tema": "escuro",
    "notificacoes_email": True
}

print("\nConfigurações do Usuário:")
for chave, valor in configuracoes_usuario.items():
    print(f"- {chave.replace('_', ' ').title()}: {valor}")

Iterando Apenas as Chaves

O método .keys() retorna uma visão das chaves do dicionário. Iterar diretamente sobre o dicionário também resulta nas chaves.

print("\nChaves das Configurações:")
for chave in configuracoes_usuario.keys():
    print(f"  Chave: {chave}")

# Iterar diretamente no dicionário (comportamento padrão)
print("\nChaves (iterando diretamente):")
for chave in configuracoes_usuario:
    print(f"  Chave: {chave}")

Iterando Apenas os Valores

O método .values() retorna uma visão dos valores do dicionário. É útil quando você só precisa dos dados sem suas chaves associadas.

preferencias_comida = {
    "joao": "pizza",
    "maria": "lasanha",
    "pedro": "pizza",
    "ana": "sushi"
}

print("\nValores das Preferências de Comida:")
for comida in preferencias_comida.values():
    print(f"  Comida: {comida}")

# Para listar valores únicos, pode-se converter para um conjunto (set)
print("\nValores únicos de Comida:")
for comida_unica in set(preferencias_comida.values()):
    print(f"  Comida Única: {comida_unica}")

Iterando Chaves em Ordem

Se a ordem das chaves for importante, pode-se usar a função sorted() para obter uma lista ordenada das chaves antes de iterar.

alunos_notas = {
    "Carlos": 8.5,
    "Ana": 9.0,
    "Bruno": 7.8,
    "Daniela": 9.5
}

print("\nNotas dos Alunos (em ordem alfabética):")
for nome in sorted(alunos_notas.keys()):
    print(f"  {nome}: {alunos_notas[nome]}")

Dicionários Aninhados

Uma das grandes forças dos dicionários é a capacidade de aninhar estruturas de dados, criando representações complexas de informações.

Lista de Dicionários

É comum ter uma lista onde cada elemento é um dicionário, representando uma coleção de objetos similares.

usuarios_sistema = [
    {
        "id": "u001",
        "nome": "Alice Santos",
        "email": "alice@example.com",
        "status": "ativo"
    },
    {
        "id": "u002",
        "nome": "Bob Lima",
        "email": "bob@example.com",
        "status": "inativo"
    },
    {
        "id": "u003",
        "nome": "Carla Rocha",
        "email": "carla@example.com",
        "status": "ativo"
    }
]

print("\nDetalhes dos Usuários do Sistema:")
for usuario in usuarios_sistema:
    print(f"  ID: {usuario['id']}, Nome: {usuario['nome']}, Status: {usuario['status']}")

Dicionário com Listas como Valores

Um valor em um dicionário pode ser uma lista, útil para armazenar múltiplos itens associados a uma única chave.

projetos_departamentos = {
    "engenharia": ["Sistema de CRM", "Otimização de Banco de Dados"],
    "marketing": ["Campanha de Lançamento", "Análise de Mercado"],
    "recursos_humanos": ["Recrutamento", "Treinamento de Equipe"]
}

print("\nProjetos por Departamento:")
for depto, projetos in projetos_departamentos.items():
    print(f"  Departamento de {depto.title()}:")
    for projeto in projetos:
        print(f"    - {projeto}")

Dicionário com Dicionários como Valores

Para estruturas hierárquicas mais complexas, um valor pode ser outro dicionário. Isso permite modelar relações "um para muitos" ou dados mais ricos para cada item.

cidades_do_mundo = {
    "paris": {
        "pais": "França",
        "populacao_estimada": 2141000,
        "fato_interessante": "Conhecida como a 'Cidade Luz'."
    },
    "tokyo": {
        "pais": "Japão",
        "populacao_estimada": 13960000,
        "fato_interessante": "É a maior área metropolitana do mundo."
    },
    "rio_de_janeiro": {
        "pais": "Brasil",
        "populacao_estimada": 6770000,
        "fato_interessante": "Famosa pelo Cristo Redentor e Carnaval."
    }
}

print("\nInformações sobre Cidades Globais:")
for nome_cidade, dados_cidade in cidades_do_mundo.items():
    print(f"\n  Cidade: {nome_cidade.title()}")
    print(f"    País: {dados_cidade['pais']}")
    print(f"    População: {dados_cidade['populacao_estimada']:,}")
    print(f"    Curiosidade: {dados_cidade['fato_interessante']}")

Tags: Python dicionários EstruturasDeDados IteraçãoPython AninhamentoDeDados

Publicado em 9-25 20:41