Dictionary with lists as value

1

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 makes for each owner a list of the value of the dictionary of the age of their animals, type this:

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

I've tried to do but it's not working, I'm just missing a little promonor that I do not know which is because my code just puts an animal for 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']}
    
asked by anonymous 24.04.2016 / 13:35

1 answer

3

It was 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']}
    
24.04.2016 / 15:26