Enunciado

Escreva uma função “inva” em Python que recebe um dicionário d e retorna um dicionário “inverso” do dicionário dado, onde, a cada valor v de d está associada a lista das chaves de d que levam a v. Exemplos:

Passo 1

E aí, mano! Precisamos fazer uma função que inverte as keys e os values de um dicionário recebido… Qual a utilidade disso?!

Também não sei, pelo menos a gente vai ficar craque em dicionários, e talvez essa tenha sido a ideia do professor. Então vamo lá! Bora começar criando o cabeçalho da função “inva”, seguindo todas as instruções do professor no enunciado:

Pronto! Repara que até o nome do parâmetro a gente copiou do enunciado, beleza! Show… Partiu pensar em como inverter os pares...

Passo 2

Mano, antes da gente começar a escrever nossa solução, tu lembra dos métodos keys() e values() que vem em todos os dicionários? Esse métodos retornam uma lista contendo seus respectivos itens, na mesma ordem… O lógica que a gente vai seguir é, a cada par key-value, a gente cria um par value-key no dicionário novo! Bom, na prática vai ficar mais claro. Vem comigo!

Pronto! Se liga que a função zip() ali facilitou muito nossa vida… Caso tu não se lembre, essa função permite a gente iterar por duas listas simultâneamente! Agora, vamos adicionar esses pares no nosso novo dicionário key-value na ordem invertida...

Passo 3

Se liga que, no novo dicionário, a gente vai usar o value como key e a key como value. A parada pode ficar meio confusa, mas a intenção da função é justamente inverter, né?! Primeiro, a gente precisa checar se aquele value já existe no novo dicionário como key.

Repara que no enunciado, todo os itens do novo dicionário são listas, mesmo os que têm apenas um elemento. Por isso, se o value (key) já existir, a gente só precisa acrescentar mais um item, e podemos usar o método de lista append() pra isso. Tipo assim:

Show! Mas se não existir, a gente precisa criar essa lista…

Beleza… Agora, a gente só precisa retornar esse novo dicionário, DEPOIS do loop terminar. Isto é, fora da endentação do for.

E pronto! Nossa função está criada…

Mas a gente precisa saber se ela tá funcionando, então bora fazer uns testes...

Passo 4

Olha, sempre que o enunciado fornecer dados de exemplo (geralmente fornece nas provas), a gente pode usar esses dados pra teste. Porque, geralmente, são esses dados que o professor vai usar pra testar na correção (lembre-se disso rsrs seja malandro).

Então bora criar os dicionários que foram usados no exemplo e testar a função com prints…

Depois de executar, o resultado foi esse aqui:

E, olha, o resultado tá exatamente igual ao do professor! Com, isso a gente garante que nossa função tá funcionando de boas. Mas não esquece que existiam MUITAS formas de fazer essa função, hein! O importante é funcionar bem que vai estar tudo ok, mesmo que o código esteja diferente dos seus colegas os professores…

E agora acabamos! Mas o enunciado tá pedindo a função inva, e não os testes. Então a gente deleta nossos testes e entrega só a função e pronto! Até a próxima, doido!

Resposta

Exercícios Relacionados