Dictionary with lists as value

Asked

Viewed 175 times

2

I have 2 lists like the following:

lista1 = [
{'Idade': '8',  'Especie': 'Gato',      'Nome do Animal': 'Felix'},
{'Idade': '57', 'Especie': 'Tartaruga', 'Nome do Animal': 'Michelangelo'},
{'Idade': '12', 'Especie': 'Cao',       'Nome do Animal': 'Rantanplian'},
{'Idade': '2',  'Especie': 'Peixe',     'Nome do Animal': 'Nemo'},
{'Idade': '45', 'Especie': 'Tartaruga', 'Nome do Animal': 'Leonardo'},
{'Idade': '9',  'Especie': 'Cao',       'Nome do Animal': 'Milo'},
{'Idade': '57', 'Especie': 'Tartaruga', 'Nome do Animal': 'Raphael'},
{'Idade': '4',  'Especie': 'Peixe',     'Nome do Animal': 'Dory'} ]

lista2 = [
{'Nome do Dono ': 'Ana', 'Nome do Animal': 'Michelangelo'},
{'Nome do Dono ': 'Eva', 'Nome do Animal': 'Dory'},
{'Nome do Dono ': 'Ada', 'Nome do Animal': 'Rantanplan'},
{'Nome do Dono ': 'Ana', 'Nome do Animal': 'Leonardo'},
{'Nome do Dono ': 'Eva', 'Nome do Animal': 'Felix'},
{'Nome do Dono ': 'Ana', 'Nome do Animal': 'Raphael'},
{'Nome do Dono ': 'Eva', 'Nome do Animal': 'Nemo'} ]

And I want to get a dictionary that will make each owner a list as the value of the dictionary of the age of their animals, like this:

{ 'Eva': ['Felix', 'Nemo', 'Dory'],'Ana': ... }

I’ve tried to do it but it’s not working for me, I’m just missing a little promonor that I don’t know what it is since my code just puts one animal per owner :

myvalues = [a['Nome do Dono'] for a in lista2 if 'Nome do Dono' in a]


novo_dict = {}
for nome in myvalues:
    novo_dict[nome] = []
    for i in  range(len(lista2)):
        if nome == lista2 [i]['Nome do Dono']:
           novo_dict[nome] = lista2 [i]['Nome do Animal']

however what I get is this:

{'Eva': ['Nemo'], 'Ana': ['Raphael'], 'Ada': ['Rantanplan']}

1 answer

3


It’s not very clear, but I think that’s what you want:

from collections import defaultdict

resultado = defaultdict(list)

animais = [
    {'Idade': '8', 'Especie': 'Gato', 'Nome do Animal': 'Felix'},
    {'Idade': '57', 'Especie': 'Tartaruga', 'Nome do Animal': 'Michelangelo'},
    {'Idade': '12', 'Especie': 'Cao', 'Nome do Animal': 'Rantanplian'},
    {'Idade': '2', 'Especie': 'Peixe', 'Nome do Animal': 'Nemo'},
    {'Idade': '45', 'Especie': 'Tartaruga', 'Nome do Animal': 'Leonardo'},
    {'Idade': '9', 'Especie': 'Cao', 'Nome do Animal': 'Milo'},
    {'Idade': '57', 'Especie': 'Tartaruga', 'Nome do Animal': 'Raphael'},
    {'Idade': '4', 'Especie': 'Peixe', 'Nome do Animal': 'Dory'}]

donos = [
    {'Nome do Dono': 'Ana', 'Nome do Animal': 'Michelangelo'},
    {'Nome do Dono': 'Eva', 'Nome do Animal': 'Dory'},
    {'Nome do Dono': 'Ana', 'Nome do Animal': 'Rantanplian'},
    {'Nome do Dono': 'Ana', 'Nome do Animal': 'Leonardo'},
    {'Nome do Dono': 'Eva', 'Nome do Animal': 'Felix'},
    {'Nome do Dono': 'Ana', 'Nome do Animal': 'Raphael'},
    {'Nome do Dono': 'Eva', 'Nome do Animal': 'Nemo'}]

for dono in donos:
    for animal in animais:
        if dono['Nome do Animal'] == animal['Nome do Animal']:
            resultado[dono['Nome do Dono']].append(
                animal['Nome do Animal']
            )

# Modificando o  defaultdict para um dicionário normal:
resultado = dict(resultado)

print(resultado)

{'Eva': ['Dory', 'Felix', 'Nemo'], 'Ana': ['Michelangelo', 'Rantanplian', 'Leonardo', 'Raphael']}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.