Compare Python index-independent lists

0

Good afternoon,

I need to compare 2 lists and when a certain value in the 'name' field of list 1 does not exist in the 'name' field of list 2 perform some function.

The way I did is comparing index by index and executing if every time the fields are different, but in case I want to execute only when there is no value in any index of list 2

dados1 = [{'name': 'Polo Pedreira', 'id': '02'},
            {'name': 'Polo Itu', 'id': '01'}]

dados2 = [{'name': 'Polo Jaguariuna', 'id': '03'},
           {'name': 'Polo Itu', 'id': '04'}]

for dadost1 in dados1:
    for dadost2 in dados2:
        if dadost1['name'] != dadost2['name']:
            print(dadost2)

It's returning this to me:

  

{'name': 'Polo Jaguariuna', 'id': '03'}   {'name': 'Polo Itu', 'id': '04'}   {'name': 'Polo Jaguariuna', 'id': '03'}

Thank you in advance

    
asked by anonymous 08.08.2018 / 22:49

2 answers

2

Based on the thinking of Alex , I've refactored my code:

listaNomes=[]
for nome in dados2:
    listaNomes.append(nome['name'])

for dadost1 in dados1:
    if dadost1['name'] not in listaNomes:
        print(dadost1)

I returned the only data in the first non-existent list in the second list:

  

{'name': 'Polo Quarry', 'id': '02'}

    
08.08.2018 / 23:45
3

I thought of the following solution:

1) Get names as a list of names

def pega_nomes_de_dicionario(lista):
    lista_nomes=[]
    for dic in lista:
        lista_nomes.append(dic['name'])
    return lista_nomes

>>> nomes_dados1 = pega_nomes_de_dicionario(dados1)
>>> nomes_dados2 = pega_nomes_de_dicionario(dados2)
>>> print nomes_dados1
['Polo Pedreira', 'Polo Itu']

2) check which names you have only one list and not the other

def pega_nomes_fatantes(nomes_dados1, nomes_dados2):
    nomes_faltantes = []

    for nome in nomes_dados1:
        if nome not in nomes_dados2:
            nomes_faltantes.append(nome)

    return nomes_faltantes

>>>> nomes_faltantes = pega_nomes_fatantes(nomes_dados1, nomes_dados2)
>>>> print nomes_faltantes
['Polo Pedreira']

3) Get the complete data of missing names

def pega_dado_completo(nomes_faltantes, dados1, dados2):
    for dado in dados1:
        if dado['name'] in nomes_faltantes:
            print(dado)

>>> pega_dado_completo(nomes_faltantes, dados1, dados2)
{'name': 'Polo Pedreira', 'id': '02'}
    
08.08.2018 / 23:06