Python 将多维字典提取到列表

Python 将多维字典提取到列表,python,list,python-2.7,dictionary,Python,List,Python 2.7,Dictionary,我有这样一本多维字典: >>> pprint.pprint(mult_dict, width = -1) {'lvl0': {0: {'lvl1': {0: {'lvl2': '123'}, 1: {'lvl2': '456'}}}, 1: {'lvl1': {0: {'lvl2': '789'}, 1: {'lvl2': '444'}}}}} 我想把它转换成这样一

我有这样一本多维字典:

>>> pprint.pprint(mult_dict, width = -1)
{'lvl0': {0: {'lvl1': {0: {'lvl2': '123'},
                       1: {'lvl2': '456'}}},
          1: {'lvl1': {0: {'lvl2': '789'},
                       1: {'lvl2': '444'}}}}}
我想把它转换成这样一个列表:

['123', '456', '789', '444']
我可以使用for循环来实现,但我更愿意使用python的列表理解在一行上实现。我认为会是这样,但显然这不起作用:

[lvl2 for lvl2 in lvl1 for lvl1 in lvl0 for lvl0 in mult_dict]

有什么想法吗?

在字典值上循环:

[v for lvl0 in mult_dict.itervalues() 
   for lvl1 in lvl0.itervalues() 
   for lvl2 in lvl1.itervalues()
   for lvl3 in lvl2.itervalues()
   for v in lvl3.itervalues()]
记得从左到右列出你的
for
循环,就像你用常规
for
循环嵌套它们一样

对于这种深层结构,最好使用递归生成器:

def flatten_dicts(d):
    for v in d.itervalues():
        try:
            for n in flatten_dicts(v):
                yield n
        except AttributeError:
            yield v
演示:

>>> mult_dict = {'lvl0': {0: {'lvl1': {0: {'lvl2': '123'},
...                        1: {'lvl2': '456'}}},
...           1: {'lvl1': {0: {'lvl2': '789'},
...                        1: {'lvl2': '444'}}}}}
>>> [v for lvl0 in mult_dict.itervalues() 
...    for lvl1 in lvl0.itervalues() 
...    for lvl2 in lvl1.itervalues()
...    for lvl3 in lvl2.itervalues()
...    for v in lvl3.itervalues()]
['123', '456', '789', '444']
>>> list(flatten_dicts(mult_dict))
['123', '456', '789', '444']