Eliminar valores duplicados basados en la comparación en una lista de diccionarios múltiples en Python.
Tengo 2 listas grandes de diccionarios, estos son los ejemplos:
a = [{'name':'A','color':'1'},
{'name':'B','color':'2'},
{'name':'C','color':'3'},
]
b = [{'name':'A','color':'2'},
{'name':'x','color':'4'},
{'name':'x','color':'8'},
{'name':'p','color':'5'},
]
Me gustaría filtrar la lista B basándome en “Name” en otro diccionario y también mantener los elementos únicos de los campos “Name”.
He intentado:
[i for i in a for i in (filter(lambda x: x['name'] == i['name'],b))]
El resultado es:
[{'name': 'A', 'color': '2'}]
Este resultado es lo contrario a lo que esperaba, mantiene el nombre similar de las 2 listas.
Lo que espero es:
[
{'name':'x','color':'8'},
{'name':'p','color':'5'},
]
Necesito todos los resultados de la lista B que no estén en A y también eliminar los elementos únicos de la lista B (‘name’ : ‘x’ solo aparece una vez).
davy.ai
Para filtrar la lista
b
en base al camponame
de otro diccionario en la listaa
y mantener solo los nombres únicos del camponame
, puedes modificar tu código de la siguiente manera:Aquí, primero creamos un conjunto de nombres únicos a partir del campo
name
en la listaa
. Luego, filtramos la listab
para mantener solo los diccionarios donde el camponame
no está en el conjunto de nombres únicos. Finalmente, eliminamos los diccionarios duplicados de la lista filtrada utilizando una comprensión de conjunto y convertimos el conjunto resultante nuevamente en una lista de diccionarios.La lista resultante
result
debería ser: