我知道这里有很多问题要列出,但我找不到我所需要的信息,所以我要问一个新的问题。
一些背景知识:我为我的模型使用了一个层次化的包,生成树结构的内置函数输出一个嵌套的循环来指示父对象、子对象等。我的目标是保持视图中的逻辑并输出一个列表,这样我就可以在模板中简单地循环它。
这是我的数据,在树结构中:
1
-1.1
--1.1.1
---1.1.1.1
--1.1.2
-1.2
--1.2.1
--1.2.2
-1.3
这是我得到的嵌套字典
{
<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>: {}
}
或者,如果你不喜欢我试图打破它的方式,这里是我在一行中得到的:
{<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>: {}}
我想得到的是:
[<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>,]
我试过迭代dict.items中的键,但只得到顶级键(1.1、1.2、1.3)
我需要做什么才能更深入?
谢谢!
我认为递归可以是你的朋友:
开始。。。呃,我是说,递归。试试这个:
前面的所有解决方案都递归地构建了大量列表,然后将它们扩展回越来越大的列表,直到得到最终答案。虽然它可以工作,但从性能的角度来看,它并不是最优的,因为它创建了许多您真正不需要的列表,并且涉及到将相同的项多次扩展到其父列表中。有些解决方案还忘了按键排序。
根据
python -m timeit -s "import flatten" "flatten.test()"
,该方法在更新以正确排序输出时,每个循环使用8.57个usecs,而对于Cédrics应答,每个循环使用14.4个usecs(for key, value in sorted(father.items()):
)相关问题 更多 >
编程相关推荐