2010-10-09 2 views
59

У меня есть список Python словарей, а именно:Проверьте, существует ли значение в списке словарей?

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

Я хотел бы проверить, существует ли уже словарь с определенным ключом/значение в списке, следующим образом:

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

ответ

131

Вот один из способов сделать это:

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

часть в скобках представляет собой выражение генератор, который возвращает True для каждого Dictiona ry, у которого есть пара ключевых значений, которую вы ищете, в противном случае False.


Если ключ также может отсутствовать код выше может дать вам KeyError. Вы можете исправить это, используя get и предоставляя значение по умолчанию.

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

Очень хороший. Благодаря! – AP257

+0

Удивительный синтаксис с одним слоем, я так сильно смотрю! Мне любопытно, что где в документах Python, которые показывают нам, мы можем фактически поставить операцию «for» перед «for»? – sylye

+1

Я нашел его, это называется List Comprehensions https://docs.python.org/2/whatsnew/2.0.html?highlight=comprehensions – sylye

2

Возможно, функция вдоль этих линий, что вы после:

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

Может быть, это помогает:

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) 
Смежные вопросы