如何循环这个Python dict并搜索是否有值
我有一个类似这样的Python dict:如何循环这个Python dict并搜索是否有值,python,json,python-2.7,dictionary,Python,Json,Python 2.7,Dictionary,我有一个类似这样的Python dict: { 'TagList': [ { 'Key': 'tag1', 'Value': 'val' }, { 'Key': 'tag2', 'Value': 'val' }, { 'Key': 'tag3', 'Value': '
{
'TagList': [
{
'Key': 'tag1',
'Value': 'val'
},
{
'Key': 'tag2',
'Value': 'val'
},
{
'Key': 'tag3',
'Value': 'val'
},
...
]
}
如何循环此dict以搜索键是否可用
编辑:@Willem Van Onsem的解决方案非常有效。但我忘了提到我需要检查多个键,例如:
If Tag1 and Tag2 exist => true
If either Tag1 or Tag2 is missing` => false
>>> all(tag in tag_names for tag in ('tag1','tag2'))
True
>>> all(tag in tag_names for tag in ('tag1','tag2','tag3'))
True
>>> all(tag in tag_names for tag in ('tag1','tag2','tag4'))
False
假设您的字典包含一个键“标记列表”
,并且您只对列表中与该键关联的字典感兴趣,您可以使用:
any(subd.get('Key') == 'tag1' for subd in the_dict['TagList'])
其中词典是您要检查的词典
因此,我们使用any(…)
内置的生成器表达式,该表达式遍历与'TagList'
键相关联的列表。对于每个这样的子字典,我们检查键'key'
是否与值'tag1'
关联。如果一个或多个子字典中没有键“键”
,这不是问题,因为我们使用.get(…)
对于给定的词典,这将生成:
>>> any(subd.get('Key') == 'tag1' for subd in the_dict['TagList'])
True
多值
如果要检查列表的所有值是否都出现在子字典中,我们可以使用以下两行代码(如果“标记名”可以散列,字符串可以散列):
如果右侧元组中的所有标记名(('tag1','tag2')
)至少在一个子词典中,则all(…)
将返回True
例如:
If Tag1 and Tag2 exist => true
If either Tag1 or Tag2 is missing` => false
>>> all(tag in tag_names for tag in ('tag1','tag2'))
True
>>> all(tag in tag_names for tag in ('tag1','tag2','tag3'))
True
>>> all(tag in tag_names for tag in ('tag1','tag2','tag4'))
False
您可以使用以下循环:
for key in d:
for item in d[key]:
for deep_key in item:
if item[deep_key] == 'tag1': # whatever you are looking for
print('Found')
或者如果您想要tag1的值
ChainMap(*d['TagList'])['tag1']
如果您将您的词典
声明为a_dict
,则它们是查找键标记1
的另一种方法。如果找到,它将返回True
elseFalse
tag_list = a_dict['TagList']
result = next((True for item in tag_list if item["Key"] == "tag1"),False)
print(result)
对于多个:
a,b=next((True for item in tag_list if item["Key"] == "ta1"),False),\
next((True for item in tag_list if item["Key"] == "tag2"), False)
result = a and b
print(result)
您的dict中的键是否比'TagList'
多?不像TagList这样只有一个键谢谢,这个单线解决方案非常有效。我可以在代码中添加另一个条件来检查tag1和tag2是否都存在吗?@Casper:这是一个更难的问题。但这是可能的。我将编辑答案。哇,非常感谢,我从来都不知道Python的这些优雅的函数,现在我可以去掉那些for循环的函数了…@WillemVanOnsem嗨Willem,我偶然发现了这种新格式,而当前的答案似乎不适用。{'Tags':{'Key':'Value'}}我想检查值'Key'是否与我的搜索匹配key@Casper:请编辑您的问题,或提出新问题。