Este intróito vem a propósito da dificuldade que alguns encontraram em resolver o problema seguinte: Suponha que tem um dicionário que relaciona receitas com ingredientes. Faça um programa que retorne outro dicionário contendo os ingredientes usados no maior número de receitas, bem como as receitas em que cada um é usado. Por exemplo:
1.
>>> receitas
=
{’sonhos’:[’agua’,’farinha’,’manteiga’, ’ovos’,’acucar’],’rabanadas’:[’pao’,’leite’,’ovos ’,’manteiga’,’acucar’],’leite creme’:[’acucar’,’ farinha’,’ovos’,’leite’]}
2.
>>> ingredientes_mais_usados(receitas)
{’ovos’: [’sonhos’, ’rabanadas’, ’leite creme’], ’
3.
acucar’: [’sonhos’, ’rabanadas’, ’leite creme’]}
1.
def
meu_inverte_dicio(dicio):
2.
novo_dicio
=
dict()
3.
for
ch, val
in
dicio.items():
4.
for
ingrediente
in
val:
5.
novo_dicio[ingrediente]
=
novo_dicio.setdefault(ingrediente,[])
+
[ch]
6.
return
novo_dicio
A partir do momento que temos o dicionário invertido temos que o percorrer à procura dos elementos cujo valor tem tamanho máximo. Já sabemos como resolver o problema semelhante de encontrar o elemento que é o “maior” de acordo com um dado critério, quando os elementos estão guardados numa lista. Neste caso, o problema é mais complexo por os elementos estarem num dicionário e por querermos não um mas todos os que têm dimensão máxima. Uma solução, possível passa por construir primeiro uma lista e só depois passar a lista a dicionário.
01.
def
meu_ingredientes_mais_usados(dicio):
02.
dicio_ingredientes
=
meu_inverte_dicio(dicio)
03.
lista_resultado
=
[]
04.
tamanho
=
0
05.
for
ch, val
in
dicio_ingredientes.items():
06.
if
len(val) > tamanho:
07.
lista_resultado
=
[(ch,val)]
08.
tamanho
=
len(val)
09.
elif
len(val)
=
=
tamanho:
10.
lista_resultado.append((ch,val))
11.
dicio_resultado
=
dict(lista_resultado)
12.
return
dicio_resultado
01.
def
meu_ingredientes_mais_usados_b(dicio):
02.
dicio_ingredientes
=
meu_inverte_dicio(dicio)
03.
dicio_resultado
=
dict()
04.
tamanho
=
0
05.
for
ch, val
in
dicio_ingredientes.items():
06.
if
len(val) > tamanho:
07.
dicio_resultado.clear()
08.
dicio_resultado[ch]
=
val
09.
tamanho
=
len(val)
10.
elif
len(val)
=
=
tamanho:
11.
dicio_resultado[ch]
=
val
12.
print
(dicio_resultado)
13.
return
dicio_resultado
Sem comentários:
Enviar um comentário