Python 有没有树形递归的快捷方法?

  • python 有系统内置的包或者函数能做到么?
[
    {"id": 1, "name": "sql", "fid": 0},
    {"id": 2, "name": "sql", "fid": 1},
    {"id": 3, "name": "sql", "fid": 0},
    {"id": 4, "name": "sql", "fid": 3},
]
[
    {"id": 1, "name": "sql", "fid": 0, "children": [{"id": 2, "name": "sql", "fid": 1}]},
    {"id": 3, "name": "sql", "fid": 0, "children": [{"id": 4, "name": "sql", "fid": 3}]},
]
阅读 3.2k
2 个回答

内置函数我目前没见过,不过数据结构算法是可以实现的,写了一个你参考下:

def build_tree(data, root_id=0):
    tree = []
    for item in data:
        if item['fid'] == root_id:
            children = build_tree(data, item['id'])
            if children:
                item['children'] = children
            tree.append(item)
    return tree

data = [
    {"id": 1, "name": "sql", "fid": 0},
    {"id": 2, "name": "sql", "fid": 1},
    {"id": 3, "name": "sql", "fid": 0},
    {"id": 4, "name": "sql", "fid": 3},
]

tree = build_tree(data)
print(tree)

我大概解释一下,build_tree是一个递归函数,它接收一个数据列表和一个根节点ID作为参数。在每次递归调用中,它遍历数据列表,找到与当前节点ID匹配的子节点,并将其加入到当前节点的子节点列表中。递归终止条件是没有匹配的子节点。最终,函数返回树形结构。

通过调用build_tree函数将给定数据转换为树形结构,你可以按需修改代码以适应你的实际需求。

新手上路,请多包涵

你想要将一个扁平的 JSON 结构转换成带有嵌套的结构,其中父子关系通过 fid 字段来建立。你可以使用Python来完成这个转换过程,没有直接的内置函数可以做到,但可以通过遍历和构建的方法来实现。

以下是一个示例的Python代码,用于将给定的扁平JSON结构转换为嵌套结构:

flat_data = [
    {"id": 1, "name": "sql", "fid": 0},
    {"id": 2, "name": "sql", "fid": 1},
    {"id": 3, "name": "sql", "fid": 0},
    {"id": 4, "name": "sql", "fid": 3},
]

nested_data = []

id_to_item = {}

for item in flat_data:
    item["children"] = []
    id_to_item[item["id"]] = item
    
    if item["fid"] == 0:
        nested_data.append(item)
    else:
        parent = id_to_item.get(item["fid"])
        if parent is not None:
            parent["children"].append(item)

print(nested_data)

在这个代码中,我们首先创建一个空的 nested_data 列表,然后使用 id_to_item 字典来跟踪每个项的父项。我们遍历 flat_data 中的每个项,将其 children 字段初始化为空列表,并将项添加到 id_to_item 字典中。然后,根据 fid 字段判断该项是否是根项(fid 为 0)或是某个父项的子项,然后将其添加到相应的位置。

这样,你就可以实现将扁平JSON结构转换为嵌套结构的操作。如果你还有其他问题,请随时提问!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题