0
respostas

[Projeto] Desafio de União de Dicionários

A solução envolve criar dicionários que, por sua vez, contêm outros dicionários dentro deles. Imagine que você tem um dicionário principal onde a chave é o nome do aluno e o valor é outro dicionário que contém informações como a média atual, a média após bonificação, ou qualquer outra informação que você precise armazenar. Dessa forma, quando você precisa acessar os dados de um aluno específico, você acessa tudo de uma vez, sem precisar procurar em múltiplas estruturas. Essa abordagem torna o código mais legível, mais seguro contra erros de sincronização e muito mais próximo de como os dados realmente são organizados no mundo real, onde cada pessoa é uma entidade completa com múltiplos atributos.

# Listas originais
lista_de_nomes = ["Maria Silva", "João Santos", "Ana Oliveira", "Pedro Costa", "Juliana Pereira"]
lista_de_medias = [8.9, 7.5, 4.2, 1.4, 9.5]

print("=" * 70)
print("UNINDO DADOS EM DICIONÁRIOS")
print("=" * 70)

# Método 1: Criando um dicionário simples (nome -> média)
print("\n MÉTODO 1: Dicionário Simples (Nome -> Média)")
print("-" * 70)

dict_simples = {}
for indice in range(len(lista_de_nomes)):
    nome = lista_de_nomes[indice]
    media = lista_de_medias[indice]
    dict_simples[nome] = media

print("\nDicionário criado:")
for nome, media in dict_simples.items():
    print(f"  {nome}: {media}")

# Método 2: Criando um dicionário aninhado (mais completo)
print("\n MÉTODO 2: Dicionário Aninhado (Nome -> Dados Completos)")
print("-" * 70)

dict_aninhado = {}
for indice in range(len(lista_de_nomes)):
    nome = lista_de_nomes[indice]
    media_original = lista_de_medias[indice]
    media_com_bonus = min(media_original + 1, 10)
    
    dict_aninhado[nome] = {
        "media_original": media_original,
        "media_bonificada": media_com_bonus,
        "diferenca": round(media_com_bonus - media_original, 2),
        "aprovado": media_com_bonus >= 5.0
    }

print("\nDicionário aninhado criado:")
for nome, dados in dict_aninhado.items():
    print(f"\n  {nome}:")
    print(f"    Média original: {dados['media_original']}")
    print(f"    Média bonificada: {dados['media_bonificada']}")
    print(f"    Diferença: +{dados['diferenca']}")
    print(f"    Aprovado: {'Sim' if dados['aprovado'] else 'Não'}")

# Método 3: Unindo dois dicionários
print("\n MÉTODO 3: Unindo Dois Dicionários")
print("-" * 70)

dict_nomes_posicao = {
    "Maria Silva": 0,
    "João Santos": 1,
    "Ana Oliveira": 2,
    "Pedro Costa": 3,
    "Juliana Pereira": 4
}

dict_medias_por_nome = {
    "Maria Silva": 8.9,
    "João Santos": 7.5,
    "Ana Oliveira": 4.2,
    "Pedro Costa": 1.4,
    "Juliana Pereira": 9.5
}

# Unindo os dicionários em um novo dicionário
dict_unificado = {}
for nome in dict_nomes_posicao.keys():
    dict_unificado[nome] = {
        "posicao": dict_nomes_posicao[nome],
        "media": dict_medias_por_nome[nome],
        "media_bonificada": min(dict_medias_por_nome[nome] + 1, 10)
    }

print("\nDicionário unificado:")
for nome, info in dict_unificado.items():
    print(f"  {nome}: Posição {info['posicao']} | Média: {info['media']} | Bonificada: {info['media_bonificada']}")

# Método 4: Acessando e modificando dados
print("\n MÉTODO 4: Acessando e Modificando Dados")
print("-" * 70)

print("\nDados de Pedro Costa no dicionário aninhado:")
dados_pedro = dict_aninhado["Pedro Costa"]
print(f"  Média original: {dados_pedro['media_original']}")
print(f"  Aprovado: {'Sim' if dados_pedro['aprovado'] else 'Não'}")

print("\nVerificando se uma chave existe usando get():")
resultado = dict_aninhado.get("Carlos Silva", "Aluno não encontrado")
print(f"  Carlos Silva: {resultado}")

print("\nTodas as chaves (nomes) do dicionário:")
print(f"  {list(dict_aninhado.keys())}")

print("\nTodas as médias bonificadas:")
print(f"  {list(dict_aninhado.values())}")

print("\n" + "=" * 70)
print(" Desafio concluído: dados organizados de forma integrada em dicionários")
print("=" * 70)

Este código demonstra como converter listas em dicionários de diferentes formas, desde a mais simples (nome associado à média) até estruturas mais complexas com informações aninhadas. A grande vantagem é que você nunca perde a associação entre os dados, reduzindo drasticamente a chance de erros que poderiam ocorrer com listas separadas.