python 3.5从复杂的OrderedDict中获取价值

时间:2016-12-29 18:57:08

标签: python-3.x ordereddictionary

使用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值。

1 个答案:

答案 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)