2010-10-09 22 views
59

Tengo una lista de Python de diccionarios, de la siguiente manera:Verifique si el valor ya existe en la lista de diccionarios?

a = [ 
    {'main_color': 'red', 'second_color':'blue'}, 
    {'main_color': 'yellow', 'second_color':'green'}, 
    {'main_color': 'yellow', 'second_color':'blue'}, 
] 

me gustaría comprobar si un diccionario con una clave/valor particular ya existe en la lista, de la siguiente manera:

// is a dict with 'main_color'='red' in the list already? 
// if not: add item 

Respuesta

131

Aquí hay una manera de hacerlo:

if not any(d['main_color'] == 'red' for d in a): 
    # does not exist 

La parte entre paréntesis es una expresión que devuelve generador True para cada dictiona Tiene el par clave-valor que está buscando, de lo contrario False.


Si la clave también podía faltar el código anterior le puede dar una KeyError. Puede solucionar esto usando get y proporcionando un valor predeterminado.

if not any(d.get('main_color', None) == 'red' for d in a): 
    # does not exist 
+1

muy agradable. ¡Gracias! – AP257

+0

Sorprendente sintaxis de una línea, ¡me he visto tan difícil para esto! Tengo curiosidad de saber en qué parte de los documentos de Python nos muestra que podemos poner la operación de 'para' antes del 'para'. – sylye

+1

Lo encontré, se llama Comprensión de listas https://docs.python.org/2/whatsnew/2.0.html?highlight=comprehensions – sylye

2

Tal vez una función a lo largo de estas líneas es lo que está buscando:

def add_unique_to_dict_list(dict_list, key, value): 
    for d in dict_list: 
    if key in d: 
     return d[key] 

    dict_list.append({ key: value }) 
    return value 
4

Tal vez esto ayuda:

a = [{ 'main_color': 'red', 'second_color':'blue'}, 
    { 'main_color': 'yellow', 'second_color':'green'}, 
    { 'main_color': 'yellow', 'second_color':'blue'}] 

def in_dictlist((key, value), my_dictlist): 
    for this in my_dictlist: 
     if this[key] == value: 
      return this 
    return {} 

print in_dictlist(('main_color','red'), a) 
print in_dictlist(('main_color','pink'), a) 
Cuestiones relacionadas