1.列表数据

data = [

    { 'id': 1, 'parent_id': 2, 'name': "Node1" },
{ 'id': 2, 'parent_id': 5, 'name': "Node2" },
{ 'id': 3, 'parent_id': 0, 'name': "Node3" },
{ 'id': 4, 'parent_id': 5, 'name': "Node4" },
{ 'id': 5, 'parent_id': 0, 'name': "Node5" },
{ 'id': 6, 'parent_id': 3, 'name': "Node6" },
{ 'id': 7, 'parent_id': 3, 'name': "Node7" },
{ 'id': 8, 'parent_id': 0, 'name': "Node8" },
{ 'id': 9, 'parent_id': 1, 'name': "Node9" }
]

2.遍历方法

def list_to_tree(data):
out = {
0: { 'id': 0, 'parent_id': 0, 'name': "Root node", 'sub': [] }
} for p in data:
out.setdefault(p['parent_id'], { 'sub': [] })
out.setdefault(p['id'], { 'sub': [] })
out[p['id']].update(p)
out[p['parent_id']]['sub'].append(out[p['id']]) return out[0]

3.测试

tree = list_to_tree(data)
import pprint
pprint.pprint(tree)

参考地址https://stackoverflow.com/questions/8191683/building-a-menu-tree-from-an-adjacency-list-in-python

最新文章

  1. quartz 线程问题
  2. SYMMETRIC MULTIPROCESSORS
  3. 如何开发H5项目 -- 入门篇
  4. codeforces 341d (树状数组)
  5. e+开发中的各种问题
  6. Gitlab服务器搭建(For fedora23)
  7. foreach 和for语句比较
  8. 变脸不变质的桥梁模式(Bridge Pattern)
  9. StrPos,StrScan,
  10. 018 关联映射文件中<class>标签中的lazy(懒加载)属性
  11. python基础(7):元祖类型(赋值补充)
  12. Echarts自动刷新数据
  13. WPS客户端更新日志留着备用
  14. HBASE基础知识总结
  15. [hdu P3085] Nightmare Ⅱ
  16. 利用pt-table-checksum校验数据一致性
  17. layoutSubviews 在什么情况下会被触发
  18. tornado源码分析-多进程
  19. Image.Save()发生“GDI+ 中发生一般性错误”
  20. BZOJ1878 [SDOI2009] HH的项链 [莫队,卡常]

热门文章

  1. Gradle 学习笔记
  2. SQL 多表查询的几种连接方式
  3. 关于Java泛型实现原理的思考与一般用法示例总结
  4. Atcoder arc079 D Decrease (Contestant ver.) (逆推)
  5. Django项目执行时No Module Named ' ' 问题的解决情况
  6. Python编程:从入门到实践—变量和简单数据类型
  7. yield(放弃、谦逊、礼让) - 瞬时的,暂时放了马上再抢
  8. memocached基础操作
  9. C#之委托(一)
  10. python接口自动化:响应内容中json字符串对象的处理