将嵌套字典转换为列表

j_s*_*syk 5 python django django-templates django-views

我知道有很多词典可以在这里列出问题,但我找不到我需要的信息,所以我要问一个新的问题.

一些背景:我正在为我的模型使用分层包,并且生成树结构的内置函数输出一个嵌套循环来指示父项,子项等.我的目标是将逻辑保留在视图中并输出列表以便我可以简单地在我的模板中循环它.

这是我的数据,在树形结构中:

1
-1.1
--1.1.1
---1.1.1.1
--1.1.2
-1.2
--1.2.1
--1.2.2
-1.3
Run Code Online (Sandbox Code Playgroud)

这是我得到的嵌套字典

{
 <Part: 1.1>:
 {
   <Part: 1.1.1>:
     {
       <Part: 1.1.1.1>: {}
     }, 
   <Part: 1.1.2>: {}
 },
 <Part: 1.2>: 
 {
   <Part: 1.2.1>: {},
   <Part: 1.2.2>: {}
 }, 
 <Part: 1.3>: {}
}
Run Code Online (Sandbox Code Playgroud)

或者如果你不喜欢我试图分解它的方式,这就是我在一行中得到的:

{<Part: 1.1>: {<Part: 1.1.1>: {<Part: 1.1.1.1>: {}}, <Part: 1.1.2>: {}}, <Part: 1.2>: {<Part: 1.2.1>: {}, <Part: 1.2.2>: {}}, <Part: 1.3>: {}}
Run Code Online (Sandbox Code Playgroud)

我想要的是:

[<Part: 1.1>, <Part: 1.1.1>, <Part: 1.1.1.1>, <Part: 1.1.2>, <Part: 1.2>, <Part: 1.2.2>, <Part: 1.2.1>, <Part: 1.3>,]
Run Code Online (Sandbox Code Playgroud)

我试过迭代dict.items中的键,但后来我只得到顶级键(1.1,1.2,1.3)

为了更深入,我需要做些什么?

谢谢!

Céd*_*ien 11

我认为递归可以成为你的朋友:

top = {"<Part: 1.1>": {"<Part: 1.1.1>": {"<Part: 1.1.1.1>": {}}, "<Part: 1.1.2>": {}}, "<Part: 1.2>": {"<Part: 1.2.1>": {}, "<Part: 1.2.2>": {}}, "<Part: 1.3>": {}}

 def grab_children(father):
    local_list = []
    for key, value in father.iteritems():
        local_list.append(key)
        local_list.extend(grab_children(value))
    return local_list

print grab_children(top)
Run Code Online (Sandbox Code Playgroud)