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},
]
python">[ {"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}]},
]
回答:
内置函数我目前没见过,不过数据结构算法是可以实现的,写了一个你参考下:
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结构转换为嵌套结构的操作。如果你还有其他问题,请随时提问!
以上是 Python 有没有树形递归的快捷方法? 的全部内容, 来源链接: utcz.com/p/938994.html