如何循环这个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': '

我有一个类似这样的Python dict:

{
    '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
else
False

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:请编辑您的问题,或提出新问题。