问题:检查值是否已存在于字典列表中?
我有一个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
回答 0
这是一种实现方法:
if not any(d['main_color'] == 'red' for d in a):
# does not exist
括号中的部分是一个生成器表达式,该表达式True
将为每个具有您要查找的键-值对的字典返回,否则为False
。
如果密钥也可能丢失,则上面的代码可以给您一个KeyError
。您可以使用get
并提供默认值来解决此问题。如果不提供默认值,None
则返回。
if not any(d.get('main_color', default_value) == 'red' for d in a):
# does not exist
回答 1
也许这会有所帮助:
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)
回答 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
回答 3
基于@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!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。