Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Desafio Resposta

Todas as respostas estão no meu notebook: https://colab.research.google.com/drive/1WQq4ACl2_H5TAWJEGX6YwCCQQf3is-gX?usp=sharing

Questão 8

id = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
quantidade = [15, 12, 1, 15, 2, 11, 2, 12, 2, 4]
preco = [93.0, 102.0, 18.0, 41.0, 122.0, 14.0, 71.0, 48.0, 14.0, 144.0]

tabela = [
    ("id", "quantidade", "preco", "total")
] + [
    (i, q, p, q * p) for i, q, p in zip(id, quantidade, preco)
]

print(tabela)

Eu deixei ainda mais bonito:

id = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
quantidade = [15, 12, 1, 15, 2, 11, 2, 12, 2, 4]
preco = [93.0, 102.0, 18.0, 41.0, 122.0, 14.0, 71.0, 48.0, 14.0, 144.0]

tabela = [
    ("id", "quantidade", "preco", "total")
] + [
    (i, q, p, q * p) for i, q, p in zip(id, quantidade, preco)
]

separador = "+" + "-" * 6 + "+" + "-" * 12 + "+" + "-" * 10 + "+" + "-" * 10 + "+"

for i, linha in enumerate(tabela):
  print(separador)
  print(f"| {str(linha[0]):<4} | {str(linha[1]):<10} | {str(linha[2]):<8} | {str(linha[3]):<8} |")

print(separador)

Questão 9:

estados = ['SP', 'ES', 'MG', 'MG', 'SP', 'MG', 'ES', 'ES', 'ES', 'SP', 'SP', 'MG', 'ES', 'SP', 'RJ', 'MG', 'RJ', 'SP', 'MG', 'SP', 'ES', 'SP', 'MG']

contagem_estados = {estado: estados.count(estado) for estado in set(estados)}

print(contagem_estados)

Eu fiz com a biblioteca collections

from collections import Counter

contagem_estados = dict(Counter(estados))

print(contagem_estados)

Questão 10:

funcionarios = [('SP', 16), ('ES', 8), ('MG', 9), ('MG', 6), ('SP', 10), ('MG', 4), ('ES',9), ('ES', 7), ('ES', 12), ('SP', 7), ('SP', 11), ('MG',8), ('ES',8), ('SP',9), ('RJ', 13), ('MG', 5), ('RJ', 9), ('SP', 12), ('MG', 10), ('SP', 7), ('ES', 14), ('SP', 10), ('MG', 12)]

funcionarios_por_estado = {
    estado: [func for est, func in funcionarios if est == estado] 
    for estado in set(e for e, _ in funcionarios)}

soma_por_estado = {
    estado: sum(lista) 
    for estado, lista in funcionarios_por_estado.items()
    }

print(funcionarios_por_estado)
print(soma_por_estado)

Depois fiz com a biblioteca collections de novo:

from collections import defaultdict

func_por_estado = defaultdict(list)

for estado, func in funcionarios:
  func_por_estado[estado].append(func)

soma_por_estado = {estado: sum(lista) for estado, lista in func_por_estado.items()}

print(dict(func_por_estado))
print(soma_por_estado)
1 resposta
solução!

Olá, Maria. Como vai?

Parabéns pela excelente resolução do desafio! É empolgante ver como você não se limitou apenas a resolver as questões, mas também buscou formas de tornar a saída dos dados mais elegante e utilizou bibliotecas avançadas para otimizar o código.

Gostaria de destacar alguns pontos técnicos brilhantes na sua abordagem que agregam muito valor ao aprendizado em Python para dados:

  • Uso da função zip e List Comprehension: Na Questão 8, você utilizou a combinação de zip com compressão de lista. Essa é a forma mais eficiente e "pythônica" de iterar sobre múltiplas sequências simultaneamente para criar uma nova estrutura.
  • Biblioteca collections: Você foi além ao utilizar o Counter e o defaultdict. O Counter é extremamente performático para contagens, e o defaultdict(list) na Questão 10 é uma das melhores práticas para evitar erros do tipo KeyError ao agrupar dados em dicionários.
  • Estética e Formatação: A sua implementação do "separador" e o uso de alinhamento no print (:<4, :<10) mostram que você já compreende como criar relatórios legíveis diretamente no terminal, algo muito útil antes de partirmos para bibliotecas gráficas.

Para complementar seus estudos, deixo uma pequena dica sobre a Questão 9:
Embora {estado: estados.count(estado) for estado in set(estados)} funcione perfeitamente, em listas gigantescas o método .count() dentro de um laço pode ficar lento (pois ele percorre a lista inteira para cada estado único). Por isso, a sua segunda opção usando Counter é muito superior em termos de performance, pois ele percorre a lista uma única vez.

Continue explorando as bibliotecas nativas do Python, elas são ferramentas poderosas para quem trabalha com Ciência de Dados!

Espero que possa ter lhe ajudado!