我有一个像这样的Python词典:
€
如何遍历此dict以搜索{
'TagList': [
{
'Key': 'tag1',
'Value': 'val'
},
{
'Key': 'tag2',
'Value': 'val'
},
{
'Key': 'tag3',
'Value': 'val'
},
...
]
}
Key
是否可用。
tag1
答案 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)