【问题标题】:Creating tree structured list from nested list从嵌套列表创建树结构列表
【发布时间】:2013-03-16 20:26:16
【问题描述】:

我有一个嵌套列表:

l = [[1], [2,3], [2,4], [2,5], [2,5,6], [2,5,7], [2,5,8],[2,5,8,9], [10],[11,12]]

并且我需要列表位于树状结构的嵌套列表中,例如:

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

我已经完成了这个post,它生成了一个我需要的类似树,但是它适用于对称的嵌套列表集。我尝试使用列表项的groupby 功能,但无法生成所需格式的列表。我想在 python 中有一些东西可以很容易地做到这一点,而我目前正在失踪。一些指针将不胜感激。

【问题讨论】:

  • 嵌套列表和嵌套字典的规则是什么?
  • @HYRY 列表中的下一个项目是列表中上一个项目的子项。所以在 [2,5,6] 中,5 是 2 的孩子,6 是 5 的孩子。基本上我必须将元素分组以形成树状结构,即父子关系。
  • 为什么结果不像{1: {}, 2: {3: {}, 4: {}, 5: {8: {9: {}}, 6: {}, 7: {}}}, 11: {12: {}}, 10: {}}
  • @Dude 根据您的评论规则,您将拥有退化树木(没有树枝)的森林(多棵树)。此外,我看不到任何导致您编写的结果的模式。我什至不知道在这里问什么来澄清事情。

标签: python nested-lists


【解决方案1】:

如果你只能使用字典:

l = [[1], [2,3], [2,4], [2,5], [2,5,6], [2,5,7], [2,5,8],[2,5,8,9], [10],[11,12]]
root = {}
for path in l:
    parent = root
    for n in path:
        parent = parent.setdefault(n, {})
import pprint
pprint.pprint(root, width=1)

输出:

{1: {},
 2: {3: {},
     4: {},
     5: {6: {},
         7: {},
         8: {9: {}}}},
 10: {},
 11: {12: {}}}

【讨论】:

  • 我还有一个嵌套列表,不知道有没有办法用这个anytree或者treelib建树?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 2016-02-12
  • 2017-02-20
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
相关资源
最近更新 更多