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']