python 列表转树结构

这是一个将普通列表转换为树结构列表的Python函数,通过关键字'id'、'parent_id'和'children'来构建树形数据。函数首先将输入列表转化为以'id'为键的字典,然后遍历列表,根据'parent_id'找到对应父节点并添加子节点,最终形成树结构。
摘要由CSDN通过智能技术生成

适用于普通列表 转 树结构列表。

"""
列表转树函数

关键字:id、parent_id、children
"""


def list2tree(data: list) -> list:
    # 转成ID为Key的字典
    mapping: dict = dict(zip([i['id'] for i in data], data))

    # 树容器
    container: list = []

    for d in data:
        # 如果找不到父级项,则是根节点
        parent: dict = mapping.get(d['parent_id'])
        if parent is None:
            container.append(d)
        else:
            children: list = parent.get('children')
            if not children:
                children = []
            children.append(d)
            parent.update({'children': children})
    return container


if __name__ == '__main__':
    data: list = [
        {'id': 1, 'parent_id': 0, 'name': '用户管理', 'url': 'https://www.baidu.com'},
        {'id': 2, 'parent_id': 0, 'name': '菜单管理', 'url': 'https://www.baidu.com'},
        {'id': 3, 'parent_id': 1, 'name': '新增用户', 'url': 'https://www.baidu.com'},
        {'id': 4, 'parent_id': 1, 'name': '删除用户', 'url': 'https://www.baidu.com'},
        {'id': 5, 'parent_id': 2, 'name': '新增菜单', 'url': 'https://www.baidu.com'},
        {'id': 6, 'parent_id': 2, 'name': '删除菜单', 'url': 'https://www.baidu.com'},
    ]

    # 打印验证一下
    for i in list2tree(data):
        print(i)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 实现列表的一种常见方式是通过递归实现,具体步骤如下: 1. 定义一个空列表 result 用于存储换后的列表。 2. 遍历的每一个节点,如果该节点不为空,则将节点的值添加到 result 中。 3. 对节点的左子和右子进行递归操作,直到遍历完整棵。 4. 返回 result 列表。 下面是一段 Python 代码实现列表的功能: ```python def treeToList(root): result = [] if root: result.append(root.val) result += treeToList(root.left) result += treeToList(root.right) return result ``` 其中,root 表示的根节点,val 表示节点的值,left 和 right 分别表示节点的左子和右子。 使用该函数,可以将一棵换为列表,例如: ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.left = TreeNode(4) root.left.right = TreeNode(5) print(treeToList(root)) # [1, 2, 4, 5, 3] ``` 在上面的例子中,我们创建了一棵,并将其换为一个列表。结果为 [1, 2, 4, 5, 3],表示的先序遍历的结果。 ### 回答2: Python列表的问题可以通过递归的方式来解决。首先,我们可以定义一个递归函数,该函数将接收一个作为参数,并将换为列表。 具体的实现步骤如下: 1. 首先判断是否为空。如果为空,则返回一个空列表。 2. 如果不为空,则创建一个空列表result。 3. 将的根节点的值添加到result列表中。 4. 递归地将的左子换为列表,并将换后的列表添加到result列表中。 5. 递归地将的右子换为列表,并将换后的列表添加到result列表中。 6. 返回result列表。 下面是一个示例代码: ```python class TreeNode: def __init__(self, value): self.value = value self.left = None self.right = None def treeToList(root): if root is None: return [] result = [] result.append(root.value) result += treeToList(root.left) result += treeToList(root.right) return result # 创建一个 root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.left = TreeNode(4) root.left.right = TreeNode(5) # 调用函数将换为列表 result = treeToList(root) print(result) # 输出列表:[1, 2, 4, 5, 3] ``` 以上代码中,我们定义了一个TreeNode类来表示的节点,然后创建了一个,并调用函数treeToList来将换为列表。最后,输出换后的列表。 需要注意的是,这只是将的节点值换为列表,并没有包含的结构信息。如果需要包含的结构信息,可以修改递归函数的实现。 ### 回答3: 在Python中,可以通过递归的方式将化为列表是由节点组成的数据结构,每个节点可以有一个或多个子节点。而列表是一种线性的数据结构,可以容纳任意类型的元素。 要将化为列表,可以按照的遍历方式进行。一种常用的遍历方式是深度优先遍历(DFS)。通过递归,可以遍历的所有节点,并将节点的值存储到列表中。 具体的步骤如下: 1. 创建一个空的列表,用于存储的节点值。 2. 判断是否为空,如果为空则返回空列表。 3. 否则,将的根节点值添加到列表中。 4. 遍历的子节点,对每个子节点执行递归操作。 5. 递归操作将子节点化为列表,并将其添加到父节点的列表中。 以下是使用Python代码实现列表的示例: ```python def tree_to_list(node): result = [] # 创建空列表 # 为空的情况 if node is None: return result # 将根节点值添加到列表中 result.append(node.value) # 遍历子节点 for child in node.children: # 递归将子节点化为列表,并添加到父节点列表中 result.extend(tree_to_list(child)) return result ``` 这样,经过列表的操作,我们可以得到一个包含中所有节点值的列表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文子阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值