Oi, Valentina! Tudo bem?
Eu resolvi antes de ler na resolução do professor da forma abaixo. Também é a primeira vez que vejo e achei bem confuso mas preferi fazer de um jeito mais "passo-a-passo" pra ajudar a memorizar. Vou te explicar como fiz:
Primeiro, eu fiz a questão 9 desse jeito:
estados = ['SP', 'ES', 'MG', 'MG', 'SP', 'MG', 'ES', 'ES', 'ES', 'SP', 'SP', 'MG', 'ES', 'SP', 'RJ', 'MG', 'RJ', 'SP', 'MG', 'SP', 'ES', 'SP', 'MG']
# Minha primeira resolução desse desafio:
sp = [sigla for sigla in estados if sigla == 'SP']
es = [sigla for sigla in estados if sigla == 'ES']
mg = [sigla for sigla in estados if sigla == 'MG']
rj = [sigla for sigla in estados if sigla == 'RJ']
lista = [siglas for siglas in [sp, es, mg, rj]]
filiais_dict = {lista[i][0]: len(lista[i]) for i in range(0, len(lista))}
filiais_dict['Total'] = len(estados)
print(filiais_dict)
Pra 9, eu resolvi contar quantas das siglas se repetem, montar listas com elas e contar o tamanho de cada lista, por isso criei a variável lista. Concordo que ficou um tanto verboso, mas depois de mais acostumado eu posso tentar deixar mais "enxuto". Assim, eu resolvi a questão 10 da seguinte forma:
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)]
es = [tupla[1] for tupla in funcionarios if tupla[0] == 'ES']
sp = [tupla[1] for tupla in funcionarios if tupla[0] == 'SP']
rj = [tupla[1] for tupla in funcionarios if tupla[0] == 'RJ']
mg = [tupla[1] for tupla in funcionarios if tupla[0] == 'MG']
lista_de_listas = [numeros for numeros in [es, sp, rj, mg]]
filiais_uf = [siglas[0] for siglas in lista]
funcionarios_filiais_dict = {filiais_uf[i]: lista_de_listas[i] for i in range(0, len(lista_de_listas))}
print(f'Quantidade de funcionários por filiais nos estados:\n{funcionarios_filiais_dict}\n')
soma_funcionarios_ufs = {filiais_uf[i]: sum(lista_de_listas[i]) for i in range(0, len(lista_de_listas))}
print(f'Somatório de funcionários por estados:\n{soma_funcionarios_ufs}')
Destrinchando, eu separei primeiramente em listas os números de cada estado colocando cada lista em uma variável nomeada por cada UF:
es = [tupla[1] for tupla in funcionarios if tupla[0] == 'ES']
Eu costumo ler uma list comprehension da seguinte forma: "na lista funcionarios (in funcionarios), cada item, que eu chamarei de tupla, retornará o valor da posição 1 da tupla (tupla[1]) caso o valor da posição 0 da tupla (tupla[0]) seja igual a ES" (if tupla[0] == 'ES').
Isso me ajuda a entender o passo-a-passo. Foi bem orientado ao que o professor fez nas aulas quando ele substituía os nomes dos itens pelos nomes das variáveis. Assim, se eu passar print(es) aparecerá:
[8, 9, 7, 12, 8, 14]
Depois, eu montei uma única lista com todas essas listas seguindo a ordem estabelecida pela sequência de variáveis:
lista_de_listas = [numeros for numeros in [es, sp, rj, mg]]
Leia-se: "na lista de variáveis (in [es, sp, rj, mg]), retorne cada lista criada, que chamarei de numeros (numeros for numeros). O que apareceria no print(lista_de_listas) seria:
[[8, 9, 7, 12, 8, 14], [16, 10, 7, 11, 9, 12, 7, 10], [13, 9], [9, 6, 4, 8, 5, 10, 12]]
A seguir, eu aproveitei a variável lista que eu montei na questão anterior pra criar uma variável com as UFs de cada estado, onde eu pego apenas o primeiro valor de cada lista contendo apenas a sigla de cada estado:
filiais_uf = [siglas[0] for siglas in lista]
E assim, montei o dicionário pedido pela primeira parte da questão:
funcionarios_filiais_dict = {filiais_uf[i]: lista_de_listas[i] for i in range(0, len(lista_de_listas))}
Eu tento ler uma dict comprehension do mesmo jeito que fiz com a list: "numa contagem de itens que vai do 0 até o 3, (for i in range(0, len(lista_de_listas))), nomeie a chave da cada item do dicionário pela UF (filiais_uf[i]) e seu respectivo valor com a lista de quantidade de funcionários (lista_de_listas[i])".
Por estarem na mesma posição (i), eles se encontrarão e formarão o seguinte dicionário:
{'ES': [8, 9, 7, 12, 8, 14], 'SP': [16, 10, 7, 11, 9, 12, 7, 10], 'RJ': [13, 9], 'MG': [9, 6, 4, 8, 5, 10, 12]}
Para a segunda parte do enunciado, apenas repliquei o dict comprehension anterior e usei um sum(lista_de_listas) como valor de cada chave:
soma_funcionarios_ufs = {filiais_uf[i]: sum(lista_de_listas[i]) for i in range(0, len(lista_de_listas))}
Dessa forma, o resultado foi:
{'ES': 58, 'SP': 82, 'RJ': 22, 'MG': 54}
Desculpa pelo código mais "verboso", mas acredito que pode ajudar a "ler melhor" esse conteúdo que realmente assusta mais no primeiro contato.