如何遍历这个Python dict并搜索值是否存在

时间:2017-07-14 17:44:22

标签: python json python-2.7 dictionary

我有一个像这样的Python词典:

如何遍历此dict以搜索{ 'TagList': [ { 'Key': 'tag1', 'Value': 'val' }, { 'Key': 'tag2', 'Value': 'val' }, { 'Key': 'tag3', 'Value': 'val' }, ... ] } Key是否可用。

编辑:@Willem Van Onsem的解决方案效果很好。但是我忘了提到我需要检查多个Key,例如:

tag1

4 个答案:

答案 0 :(得分:5)

假设您的词典包含一个键'TagList'并且您只对与该键相关联的列表中的词典感兴趣,您可以使用:

any(subd.get('Key') == 'tag1' for subd in the_dict['TagList'])

字典the_dict是您要检查的字典。

因此,我们将any(..)内置函数与生成器表达式一起使用,该表达式遍历与'TagList'键关联的列表。对于每个此类子字典,我们检查键'Key'是否与值'tag1'相关联。如果一个或多个子管理中没有密钥'Key',那么这不是问题,因为我们使用.get(..)

对于您的给定字典,这会生成:

>>> any(subd.get('Key') == 'tag1' for subd in the_dict['TagList'])
True

多个值

如果要检查列表中是否出现列表的所有值,我们可以使用以下两行(给定"标记名称"可以清除,字符串是可以洗的):

tag_names = {subd.get('Key') for subd in the_dict['TagList']}
all(tag in tag_names for tag in ('tag1','tag2'))

如果 all all(..)将返回True,右侧元组中的标记名称(('tag1','tag2'))每个都在至少一个子字典中。

例如:

>>> 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

答案 1 :(得分:2)

您可以使用以下循环:

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')

答案 2 :(得分:0)

from collections import ChainMap

'tag1' in ChainMap(*d['TagList'])

或者如果你想要tag1的值

ChainMap(*d['TagList'])['tag1']

答案 3 :(得分:0)

如果您将dictionary声明为a_dict,那么他们就是找到Key tag1的另一种方式。如果找到,则会return True其他False

tag_list = a_dict['TagList']
result = next((True for item in tag_list if item["Key"] == "tag1"),False)
print(result)

for multiple:

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)