Olá, Aristóteles. Como vai?
Parabéns por mais uma excelente resolução de desafio no fórum! O seu código está sensacional, muito bem estruturado e demonstra que você já tem total clareza sobre como manipular e estruturar diferentes tipos de coleções em Python.
O grande destaque do seu script foi o uso da função nativa zip(). No mercado de desenvolvimento, o zip() é considerado a ferramenta padrão ouro quando precisamos parear elementos de duas ou mais sequências diferentes que possuem o mesmo tamanho. Unir isso com a função dict() para transformar o resultado diretamente em um dicionário foi uma sacada cirúrgica, pois os dicionários são as estruturas de dados ideais para armazenar relações de chave-valor (como o par produto: preço).
Vamos analisar as ótimas práticas que você aplicou na sua função:
- O método
.strip() nas Compreensões de Lista: Adicionar o .strip() dentro dos laços internos ([p.strip() for p in ...]) foi uma escolha excelente. Como o usuário pode digitar espaços por engano após a vírgula (ex: "maçã, banana"), o .strip() limpa esses espaços invisíveis antes e depois do texto, evitando que as chaves do seu dicionário fiquem com nomes como " banana" (com um espaço antes). - O método
.items() no laço final: Usar o .items() para desempacotar a chave e o valor simultaneamente no laço for produto, preco in resultado.items(): é a maneira mais legível e performática de percorrer um dicionário em Python.
Como sugestão de aprofundamento e boa prática de segurança para cenários reais: o que aconteceria se o usuário digitasse 3 produtos, mas esquecesse de digitar o preço do último, inserindo apenas 2 preços?
Por padrão, a função zip() combina os elementos até chegar ao fim da menor lista e ignora o resto de forma silenciosa. No caso citado, o terceiro produto sumiria do resultado final sem nenhum aviso.
Para lidar com isso e evitar inconsistência de dados no mercado de trabalho, existem duas abordagens comuns:
1. Validar o tamanho das listas antes (Garantia de consistência)
Você pode adicionar uma condicional simples para checar se a quantidade de itens bate antes de fazer a combinação:
def combinar_listas(produtos_str, precos_str):
produtos = [p.strip() for p in produtos_str.split(",")]
precos = [float(p.strip()) for p in precos_str.split(",")]
if len(produtos) != len(precos):
print("Erro: A quantidade de produtos e preços deve ser a mesma!")
return {}
return dict(zip(produtos, precos))
2. Usar o zip_longest() (Preenchimento de valores ausentes)
Se o seu objetivo for aceitar que faltem dados e preencher o preço vazio com um valor padrão (como 0.0), o Python possui uma biblioteca nativa chamada itertools que traz a função zip_longest:
from itertools import zip_longest
def combinar_listas(produtos_str, precos_str):
produtos = [p.strip() for p in produtos_str.split(",")]
precos = [float(p.strip()) for p in precos_str.split(",")]
# Se faltar preço, ele assume automaticamente 0.0 para o produto restante
return dict(zip_longest(produtos, precos, fillvalue=0.0))
O seu código original cumpre perfeitamente o objetivo pedagógico proposto na atividade e está com uma escrita impecável. Continue mantendo essa consistência e esse altíssimo nível nos seus estudos de Python!
Espero que possa ter lhe ajudado!