我有一个嵌套的有序字典,即有序字典,其中一些值是包含更多有序字典的有序字典。 当我使用集合模块并使用以下调用
时yOrDict = yaml_ordered_dict.load('ApplyForm.yml')
然后我从yml文件yOrDict
获得一个有序字典ApplyForm.yml
。
假设yOrDict只有一个键(ApplyForm
)和一个值,而后者又是一个有序词典。
进一步调用给出另一个有序词典:
yOrDictLevel1 = yOrDict.get('ApplyForm')
说yOrDictLevel1
有六个键,其值包含有序词典。
说在某个地方,其中一个有序字典的值为Block
。
在python中是否有一个调用/函数/方法,通过它我可以检查Block是否出现在顶级有序字典中yOrDict
?
即我想检查yOrDict中是否存在字符串“Block”?
答案 0 :(得分:1)
这应该可以解决问题。
def find_value(needle, container):
# Already found the object. Return.
if needle == container:
return True
values = None
if isinstance(container, dict):
values = container.values()
elif hasattr(container, '__iter__'):
values = container.__iter__()
if values is None:
return False
# Check deeper in the container, if needed.
for val in values:
if find_value(needle, val):
return True
# No match found.
return False
用法:
In [3]: d = { 'test': ['a', 'b', 'c'], 'd1': { 'd2': 'Block', 'a': 'b'} }
In [4]: find_value('Block', d)
Out[4]: True
编辑:测试值是否包含needle
:
def find_value(needle, container):
# Already found the object. Return.
if isinstance(container, basestring) and needle in container:
return True
values = None
if isinstance(container, dict):
values = container.values()
elif hasattr(container, '__iter__'):
values = container.__iter__()
if values is None:
return False
# Check deeper in the container, if needed.
for val in values:
if find_value(needle, val):
return True
# No match found.
return False
答案 1 :(得分:0)
if "Block" in yOrDict.get('ApplyForm').values():
print "Found Block value"
它不是高级元字典的显式方法,因为它可以获取并搜索值,但它的简洁并可以解决问题。
编辑对您的评论的回复
if (("Beijing" in val) for key,val in yOrDict.get('ApplyForm')iteritems()):
print "Found Beijing"