python递归评论tree形图代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python递归评论tree形图代码相关的知识,希望对你有一定的参考价值。

首先我有必要记录下来这段代码,因为我遇到了这个问题, 然后没有解决

后来, 前段说我找到一段代码给我看看, 我并没有在意, 然后她实现了, 她实现了,她真的实现了, 我。。。

为了感谢她,我陪她玩了一中午的五子棋, 并假装输了几把

 

 

先说目的:

    递归迭代

再看数据:

  其实有个前提, 就是aid不能重复

  fid是父级id, 指向的aid

  如果 aid == fid , 证明fid的那个aid是子集

  如果 fid == 0 就证明是顶级

 代码:

def aaa(oldArr, fid):

    newArr = []
    for i in oldArr:
        if i["fid"] == fid:
            obj = {"aid": i["aid"], "description": i["description"]}
            child = aaa(oldArr, i["aid"])
            if len(child) > 0:
                obj["child"] = child

            newArr.append(obj)

    return newArr



if __name__ == \'__main__\':
    li = [
        {"aid": 5, "fid": 1, "description": "职业价值观4", "vid": 1, "variableName": "标准系数"},

        {"aid": 1, "fid": 3, "description": "职业价值观1", "vid": 1},
        {"aid": 4, "fid": 3, "description": "职业价值观2", "vid": 2},
        {"aid": 7, "fid": 3, "description": "职业价值观3", "vid": 3},

        {"aid": 2, "fid": 0, "description": "教育", "vid": 4},
        {"aid": 3, "fid": 0, "description": "时间", "vid": 5},
    ]
    res = {"dirname": "", "child_dirs": [], "files": []}
    print(aaa(li, 0)) 

 

 

需求2, 进行树形tree格式前传参格式调整

需求:

 

代码:

#!/usr/bin/python
# -*- coding:utf-8 -*-

import os.path
import json
from pprint import pprint

a = [
    \'/a/1/1.png\',
    \'/b/2/2.png\',
    \'/a/1/3.png\',
    \'/a/5.png\',
    \'/7.png\',
    \'/a/3/4.png\'
]


def walk(parent, r, endchild=True):
    parent, child = os.path.split(parent)
    if not child == \'\':
        r = walk(parent, r, endchild=False)
        print \'获取到上一级的节点dict,增加当前节点的信息[%s]\' % r
        if endchild:
            print \'这里是叶子节点了,添加文件信息\'
            r[\'files\'].append(child)
            return r
        else:
            try:
                result = [x for x in r[\'childs\'] if x[\'name\'] == \'./\'+child][0]
            except:
                print \'这里是中间节点,增加中间节点信息[%s, %s]\' % (parent, child)
                r[\'childs\'].append({
                    "name": \'./\' + child,
                    "files": [],
                    "childs": []
                })
                result = [x for x in r[\'childs\'] if x[\'name\'] == \'./\'+child][0]
            print \'返回新增的节点作为下一个递归回退的当前节点[%s]\' % result
            return result
    else:
        return r


if __name__ == \'__main__\':
    r = {
        "name": \'/\',
        "files": [],
        "childs": []
    }
    for i in a:
        walk(i, r)
        print json.dumps(r)

 

 结果:

记得拿for最后一个

 

{
    "childs": [{
        "childs": [{
                        "childs": [],
                        "name": "./1",
                        "files": ["1.png", "3.png"]
                    }, {
                        "childs": [],
                        "name": "./3",
                        "files": ["4.png"]
                    }],
        "name": "./a",
        "files": ["5.png"]
    }, 


    {
        "childs": [{
                        "childs": [],
                        "name": "./2",
                        "files": ["2.png"]
                    }],
                    "name": "./b",
                    "files": []
                }


                ],
    "name": "/",
    "files": ["7.png"]
}

 

以上是关于python递归评论tree形图代码的主要内容,如果未能解决你的问题,请参考以下文章

树形控件如何隐藏vue

具有递归的 Python C API - 段错误

递归:python+easyui实现tree

Paint Tree

JavaScript - 代码片段,Snippets,Gist

动态 Rstudio 代码片段