Проверьте, существует ли значение в списке словарей?
У меня есть список словарей на 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
Ответы
Ответ 1
Вот один из способов сделать это:
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
Ответ 2
Возможно, это помогает:
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
Возможно, функция по этим строкам - это то, что вам нужно:
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
На основании @Mark Byers отличный ответ и следующий @Florent вопрос,
просто чтобы указать, что он также будет работать с 2 условиями в списке DIC с более чем 2 ключами:
names = []
names.append({'first': 'Nil', 'last': 'Elliot', 'suffix': 'III'})
names.append({'first': 'Max', 'last': 'Sam', 'suffix': 'IX'})
names.append({'first': 'Anthony', 'last': 'Mark', 'suffix': 'IX'})
if not any(d['first'] == 'Anthony' and d['last'] == 'Mark' for d in names):
print('Not exists!')
else:
print('Exists!')
Результат:
Exists!