Проверить, существует ли значение в списке словарей? - PullRequest
97 голосов
/ 09 октября 2010

У меня есть список словарей 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

Ответы [ 3 ]

202 голосов
/ 09 октября 2010

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

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

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


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

if not any(d.get('main_color', None) == 'red' for d in a):
    # does not exist
5 голосов
/ 09 октября 2010

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

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)
3 голосов
/ 09 октября 2010

Возможно, вам нужна такая функция:

 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...