Home > Software engineering >  Filter list based on value existing in another list
Filter list based on value existing in another list

Time:01-28

I have o first list A=

      [{'name': 'PASSWORD', 'id': '5f2496e5-dc40-418a-92e0-098e4642a92e'},
     {'name': 'PERSON_NAME', 'id': '3a255440-e2aa-4c4d-993f-4cdef3237920'},
     {'name': 'PERU_DNI_NUMBER', 'id': '41f41303-4a71-4732-a8a4-0eecea464562'},
     {'name': 'PHONE_NUMBER', 'id': 'ac24413b-bb8f-4adc-ada5-a984f145a70b'},
     {'name': 'POLAND_NATIONAL_ID_NUMBER',
      'id': '32c49d92-6d5f-408e-b41e-dfec76ceae6a'}]

and I have a second list B :

     [{'name': 'PHONE_NUMBER', 'count': '96'}]

I want to filter the first list based on the second in order to have the following list :

[{'name': 'PHONE_NUMBER', 'count': '96','id': 'ac24413b-bb8f-4adc-ada5-a984f145a70b'}.

I have used the following code but I dont get the right ouptut:

 filtered = []

for x,i in DLP_job[i]['name']:
    if x,i in ids[i]['name']:
        filtered.append(x)

print(filtered)

CodePudding user response:

One way is to walk both lists, and wherever you have matching name keys, use the merger of the 2 dicts:

l1 =  [{'name': 'PASSWORD', 'id': '5f2496e5-dc40-418a-92e0-098e4642a92e'},
     {'name': 'PERSON_NAME', 'id': '3a255440-e2aa-4c4d-993f-4cdef3237920'},
     {'name': 'PERU_DNI_NUMBER', 'id': '41f41303-4a71-4732-a8a4-0eecea464562'},
     {'name': 'PHONE_NUMBER', 'id': 'ac24413b-bb8f-4adc-ada5-a984f145a70b'},
     {'name': 'POLAND_NATIONAL_ID_NUMBER',
      'id': '32c49d92-6d5f-408e-b41e-dfec76ceae6a'}]

l2 = [{'name': 'PHONE_NUMBER', 'count': '96'}, {'name': 'PERSON_NAME', 'count': '100'}]

result = []
for d2 in l2:    
    for d1 in l1:
        if d1['name'] == d2['name']:
            result.append({**d1,  **d2})

print(result)
[{'name': 'PHONE_NUMBER', 'id': 'ac24413b-bb8f-4adc-ada5-a984f145a70b', 'count': '96'},
{'name': 'PERSON_NAME', 'id': '3a255440-e2aa-4c4d-993f-4cdef3237920', 'count': '100'}]

CodePudding user response:

Here is the solution

A = [{'name': 'PASSWORD', 'id': '5f2496e5-dc40-418a-92e0-098e4642a92e'},
         {'name': 'PERSON_NAME', 'id': '3a255440-e2aa-4c4d-993f-4cdef3237920'},
         {'name': 'PERU_DNI_NUMBER', 'id': '41f41303-4a71-4732-a8a4-0eecea464562'},
         {'name': 'PHONE_NUMBER', 'id': 'ac24413b-bb8f-4adc-ada5-a984f145a70b'},
         {'name': 'POLAND_NATIONAL_ID_NUMBER',
          'id': '32c49d92-6d5f-408e-b41e-dfec76ceae6a'}]
B = [{'name': 'PHONE_NUMBER', 'count': '96'}]
    
print([{**x, **y} for x in A for y in B if y['name'] == x['name']])
  •  Tags:  
  • Related