es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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).

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para filtrar la lista b en base al campo name de otro diccionario en la lista a y mantener solo los nombres únicos del campo name, puedes modificar tu código de la siguiente manera:

    unique_names = set(d['name'] for d in a)
    filtered_b = [d for d in b if d['name'] not in unique_names]
    result = [dict(t) for t in {tuple(d.items()) for d in filtered_b}]
    

    Aquí, primero creamos un conjunto de nombres únicos a partir del campo name en la lista a. Luego, filtramos la lista b para mantener solo los diccionarios donde el campo name 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:

    [
      {'name': 'p', 'color': '5'}, 
      {'name': 'x', 'color': '8'}
    ]
    

Comments are closed.