标签导航:

python字典如何构建无限级树结构?

Python字典构建无限级树结构:高效数据组织方法

在实际应用中,将扁平数据转化为树形结构能够提升数据可读性和处理效率。本文将详细阐述如何利用Python代码,将包含父节点ID的字典列表转换为无限级树形结构,并用children字段表示子节点。

示例数据:

rows = [
    {'pid': 0, 'id': 1, 'name': 'aaa'},
    {'pid': 0, 'id': 2, 'name': 'bbb'},
    {'pid': 0, 'id': 3, 'name': 'ccc'},
    {'pid': 1, 'id': 4, 'name': 'ddd'},
    {'pid': 4, 'id': 5, 'name': 'eee'},
    {'pid': 5, 'id': 6, 'name': 'fff'},
]

通过递归函数实现数据转换:

def build_tree(data, parent_id=None):
    tree = []
    for item in data:
        if item['pid'] == parent_id:
            node = {'id': item['id'], 'name': item['name']}
            children = build_tree(data, item['id'])
            if children:
                node['children'] = children
            tree.append(node)
    return tree

build_tree函数接收原始数据列表data和父节点ID parent_id (默认为None, 表示根节点) 作为参数。函数遍历data,查找pid与parent_id匹配的节点,创建包含id和name信息的节点字典。然后递归调用build_tree函数构建子节点,并将子节点添加到children字段。最后,将节点添加到树列表并返回。

另一个示例:

data = [
    {'id': 1, 'name': 'A', 'parent_id': None},
    {'id': 2, 'name': 'B', 'parent_id': 1},
    {'id': 3, 'name': 'C', 'parent_id': 1},
    {'id': 4, 'name': 'D', 'parent_id': 2},
    {'id': 5, 'name': 'E', 'parent_id': 3},
    {'id': 6, 'name': 'F', 'parent_id': 3},
    {'id': 7, 'name': 'G', 'parent_id': 4},
    {'id': 8, 'name': 'H', 'parent_id': 5},
]

tree = build_tree(data)
print(tree)

这段代码将输出构建好的树形结构。 请注意,此代码未包含循环检测机制,处理存在循环引用的数据时可能会导致无限递归。实际应用中,需添加循环检测和处理来避免此问题。