如何在Python中获取复杂字典中存在的所有值

时间:2016-02-03 12:14:16

标签: python dictionary

假设我们有多个复杂的字典,格式不同,有没有办法以自动方式提取所有值?

例如:

a = {1:2,3:4,4:{1:5}}
a.values()
[2,4,{1:5}]

但我想要的是以下内容:

[2,4,5]

如何管理以下字典的案例:

b = {1:2,3:4,5:[{6:7,8:9},{10:11}]}

输出:

[2,4,7,9,11]

1 个答案:

答案 0 :(得分:2)

使用isinstance功能检查项目的类型。

>>> def extract(d):
    for i,j in d.items():
        if isinstance(j, dict):
            for x in j.values():
                yield x
        else:
            yield j


>>> list(extract({1:2,3:4,4:{1:5}}))
[2, 4, 5]

<强>更新

>>> def extract(d):
    for i,j in d.items():
        if isinstance(j, dict):
            for x in extract(j):
                yield x
        else:
            yield j


>>> list(extract({1:2,3:4,4:{1:{5:6}}}))
[2, 4, 6]

最终更新:

>>> def extract(d):
    for i,j in d.items():
        if isinstance(j, dict):
            for x in extract(j):
                yield x
        elif isinstance(j, list):
            for k in j:
                if isinstance(k, dict):
                    for l in extract(k):
                        yield l
        else:
            yield j


>>> list(extract({1:2,3:4,5:[{6:7,8:9},{10:11}]}))
[2, 4, 9, 7, 11]