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

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

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

先说目的:

    递归迭代

再看数据:

  其实有个前提, 就是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) > :
obj["child"] = child newArr.append(obj) return newArr if __name__ == '__main__':
li = [
{"aid": , "fid": , "description": "职业价值观4", "vid": , "variableName": "标准系数"}, {"aid": , "fid": , "description": "职业价值观1", "vid": },
{"aid": , "fid": , "description": "职业价值观2", "vid": },
{"aid": , "fid": , "description": "职业价值观3", "vid": }, {"aid": , "fid": , "description": "教育", "vid": },
{"aid": , "fid": , "description": "时间", "vid": },
]
res = {"dirname": "", "child_dirs": [], "files": []}
print(aaa(li, )) 

需求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形图代码的更多相关文章

  1. python画出心形图

    程序员表达爱的方式真是多种多样.比如,用python来画一个心型,献给梦中的情人,代码如下: from turtle import * pensize(1) pencolor('red') fillc ...

  2. Python实现各种排序算法的代码示例总结

    Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...

  3. 【转】Python微信好友头像拼接图

    转自:Python微信好友头像拼接图 今天在朋友圈看到有人发了微信好友拼接图,心里满是新奇,看了下评论才知道用Python写的.心里痒痒,立马就安装了下Python. 安装好了之后,看了下大神的代码, ...

  4. python 递归深度优先搜索与广度优先搜索算法模拟实现

    一.递归原理小案例分析 (1)# 概述 递归:即一个函数调用了自身,即实现了递归 凡是循环能做到的事,递归一般都能做到! (2)# 写递归的过程 1.写出临界条件2.找出这一次和上一次关系3.假设当前 ...

  5. python用户评论标签匹配的解决方法

    python用户评论标签匹配的解决方法 这篇文章主要为大家详细介绍了python用户评论标签匹配的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 我们观察用户评论发现:属性词往往和情感词伴 ...

  6. python 递归,深度优先搜索与广度优先搜索算法模拟实现

    一.递归原理小案例分析 (1)# 概述 递归:即一个函数调用了自身,即实现了递归 凡是循环能做到的事,递归一般都能做到! (2)# 写递归的过程 1.写出临界条件 2.找出这一次和上一次关系 3.假设 ...

  7. python抓取性感尤物美女图

    由于是只用标准库,装了python3运行本代码就能下载到多多的美女图... 写出代码前面部分的时候,我意识到自己的函数设计错了,强忍继续把代码写完. 测试发现速度一般,200K左右的下载速度,也没有很 ...

  8. Android图表库MPAndroidChart(三)——双重轴线形图的实现,这次就so easy了

    Android图表库MPAndroidChart(三)--双重轴线形图的实现,这次就so easy了 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库 ...

  9. 用Python递归解决阿拉伯数字转为中文财务数字格式的问题(2)--打开思路的一种方法

    几天前自己写了个将阿拉伯数字转为中文财务数字的程序.用的递归,不幸的是它是树形递归. 虽然实际过程中不太可能出现金额数字大到让Python递归栈溢出,但是始终是一块心病,这玩意终究在理论上是受限制的. ...

随机推荐

  1. Mysql数据库If语句的使用

    MySQL的if既可以作为表达式用,也可在存储过程中作为流程控制语句使用,如下是做为表达式使用: IF表达式 [sql] view plain copy 如果 expr1 是TRUE (expr1 & ...

  2. Memory Leak检測神器--LeakCanary初探

      在之前的文章Android内存泄露的几种情形中提到过在开发中常见的内存泄露问题,可是过于草率.因为刚开年,工作还没正式展开,就看了一下Github开源大户Square的LeakCanary,并用公 ...

  3. Introducing Project Kinect for Azure

    https://www.linkedin.com/pulse/introducing-project-kinect-azure-alex-kipman/ Hello everyone! Microso ...

  4. Asp.Net时间方法大全

    DateTime dt = DateTime.Now; //当前时间 DateTime startWeek = dt.AddDays(- Convert.ToInt32(dt.DayOfWeek.To ...

  5. electron 创建右键菜单

    1.引入模块 const Electron = require('electron'); const remote = Electron.remote; const Menu = remote.Men ...

  6. MySQL索引的维护与优化——查找重复及冗余索引

    方法一:通过MySQL的information_schema数据库 查找重复与冗余索引 SELECT a.table_schema AS '数据库', a.table_name AS '表名', a. ...

  7. Machine Learning、Date Mining、IR&NLP 会议期刊论文推荐

    核心期刊排名查询 http://portal.core.edu.au/conf-ranks/ http://portal.core.edu.au/jnl-ranks/ 1.机器学习推荐会议 ICML— ...

  8. 中南大学oj:1336: Interesting Calculator(广搜经典题目)

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1336 There is an interesting calculator. It has 3 r ...

  9. Jenkins + Django 完整实战,细化到每一步操作

    Reference:  http://blog.csdn.net/GitChat/article/details/78271099?locationNum=3&fps=1 [不要错过文末彩蛋] ...

  10. red hat enterprise linux 6

    i386(32位):http://rhel.ieesee.net/uingei/rhel-server-6.3-i386-dvd.iso迅雷快传:http://kuai.xunlei.com/d/PF ...