从后代列表构造python丰富树

qcbq4gxm  于 2022-12-28  发布在  Python
关注(0)|答案(2)|浏览(121)

我试图从一个派生列表d构造一个python rich.Tree

d = {0: [1, 2], 2: [3, 4, 5], 4: [6, 7]}

我期望得到这样的结果:

# manually constructed string
expected = \
"""
0
├── 1
└── 2
    └── 3
    └── 4
        └── 6
        └── 7
    └── 5
"""

但我对如何继续施工感到困惑:下面的代码不正确。

from rich.tree import Tree
from rich import print as rprint

tree = Tree("0")
tree.add("1")
tree.add("2").add("3")
tree.add("4").add("6").add("7")
tree.add("5")
rprint(tree)

0
├── 1
├── 2
│   └── 3
├── 4
│   └── 6
│       └── 7
└── 5

如有任何建议,将不胜感激,谢谢!

gjmwrych

gjmwrych1#

以下方法应该有效:

from rich.tree import Tree
from rich import print as rprint

tree = Tree("0")
tree.add("1")
tree.add("2").add("3")
four_branch = tree.add("4")
four_branch.add("6")
four_branch.add("7")
tree.add("5")
rprint(tree)

如果查看文档中链接的示例,您会发现tree.add(...)返回一个值,然后可以将该值添加到

deyfvvtc

deyfvvtc2#

你可以使用一个递归函数来将树的字典表示(即邻接列表)转换为嵌套树对象:

def make_tree(adj, node=0):
    tree = Tree(str(node))
    for child in adj.get(node, []):
        tree.add(make_tree(adj, child))
    return tree

这样打电话:

d = {0: [1, 2], 2: [3, 4, 5], 4: [6, 7]}
tree = make_tree(d)
rprint(tree)

相关问题