[英]Python/ materialized paths: recursively create nested dict from flat list
我正在尝试从mongodb的包含路径字符串的字典的平坦列表中创建嵌套的dict结构,以构建将在d3中显示的树。 例如,这是一组示例数据:
[ { "_id" : 1, "name" : "var", "path" : "/" }, { "_id" : 2, "name" : "var", "path" : "/var/" }, { "_id" : 3, "name" : "log", "path" : "/var/var/" }, { "_id" : 4, "name" : "log2", "path" : "/var/var/" }, { "_id" : 5, "name" : "uwsgi", "path" : "/var/var/log/" }, { "_id" : 6, "name" : "nginx", "path" : "/var/var/log2/" }, { "_id" : 7, "name" : "error", "path" : "/var/var/log2/nginx/" }, { "_id" : 8, "name" : "access", "path" : "/var/var/log2/nginx/" } ]
我需要将数据转换为具有名称属性和子项列表的这种节点格式,以使图表显示
{ 'name': 'var', '_id': 1, 'children': [ { 'name': 'var' '_id': 2 'children': [ { '_id': 3 'name': 'log', 'children': [ { '_id':5, 'name': 'uwsgi', 'children': [] } ] }, { '_id': 4 'name': 'log2', 'children': [ { '_id': 6, 'name': 'nginx', 'children': [ { '_id': 7, 'name': 'error', 'children': [] }, { '_id': 8, 'name', 'access', 'children': [] } ] } ] } ] } ] }
我尝试了类似的方法,但是没有用:
def insert_node(d, res): if not res.get("children"): res["children"] = [] if d["path"] == res["path"]: res["children"].append(d) else: for c in res["children"]: insert_node(d, c) root = nodes[0] for node in nodes[1:] insert_node(node, root)
是否有经典的递归方法来填充嵌套的dict结构?
可能会解决吗?
def insert_node(d, res):
if not res.get("children"):
res["children"] = []
if d["path"] == res["path"]+res['name']+'/':
res["children"].append(d)
else:
for c in res["children"]:
insert_node(d, c)
root = nodes[0]
for node in nodes[1:]
insert_node(node, root)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.