使用python 3.5,我正在读取一个配置文件(我无法控制)寻找一个值,它给了我一个OrderedDict。 我试过了:
l = list(dict.items())
for t in l:
print(t)
返回了一个元组列表,我正在寻找的值是l [2] - 所以我在l [2]中找到了t,这给了另一个复杂的输出:
('driver', OrderedDict([('type', 'aws'), ('aws',
OrderedDict([('upload_credentials', True), ('availability_zones',
OrderedDict([('eu-west-1', [OrderedDict([('zone', 'eu-west-1a'), ('subnet',
'10.0.0.0/22')])...('ssl_cert_arn', 'arn:aws:acm:us-west-2:12345667777')]))...
这里是我被卡住的地方,我尝试过使用不同的循环,递归,字典等等。但我无法达到我想要的价值。 我怎么能从这里开始假设我在正确的轨道上...... 我正在寻找那个ssl值。
答案 0 :(得分:1)
我们将不得不递归浏览OrderedDict
,直到我们看到'ssl_cert_arn'
密钥。
def recursive_scan(d, target):
if target in d:
return d[target]
for v in d.values():
if isinstance(v, OrderedDict):
ret = recursive_scan(v, target)
if ret is not None: #Maybe v[target] is some falsey value like ""
return ret
return None
经过进一步的反思,这可能会更好地发挥作为发电机。
def recursive_scan(d, target):
if target in d:
yield d[target]
for v in d.values():
if isinstance(v, OrderedDict):
yield from recursive_scan(v, target)