python3 如何将list里的dict递归成树?

无闻i 2017-11-27 07:35:46
数据结构如下:

list = [
{'id':1, 'title':'t1', 'parent_id':0},
{'id':2, 'title':'t2', 'parent_id':0},
{'id':3, 'title':'t1_1', 'parent_id':1},
{'id':4, 'title':'t1_2', 'parent_id':1},
{'id':5, 'title':'t1_2_1', 'parent_id':4},
{'id':6, 'title':'t2_1', 'parent_id':2},
]


请教怎么输出以下的树格式:

t1
t1_1
t1_2
t1_2_1
t2
t2_1
...全文
508 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
无闻i 2017-11-28
  • 打赏
  • 举报
回复
引用 3 楼 njg_jh 的回复:

list = [
{'id':1,'title':'t1','parent_id':0},
{'id':2,'title':'t2','parent_id':0},
{'id':3,'title':'t1_1','parent_id':1},
{'id':4,'title':'t1_2','parent_id':1},
{'id':5,'title':'t1_2_1','parent_id':4},
{'id':6,'title':'t2_1','parent_id':2},
]

def printList(parentId, tree, spaceStr = ''):
	for x in tree:
		if x['parent_id'] == parentId:
			print(spaceStr, x['title'], sep = '')
			printList(x['id'], tree, spaceStr + ' ')

printList(0, list)

list = [
    {'id':1, 'title':'t1', 'parent_id':0},
    {'id':2, 'title':'t2', 'parent_id':0},
    {'id':3, 'title':'t1_1', 'parent_id':1},
    {'id':4, 'title':'t1_2', 'parent_id':1},
    {'id':5, 'title':'t1_2_1', 'parent_id':4},
    {'id':6, 'title':'t2_1', 'parent_id':2},
    {'id':7, 'title':'t2_2', 'parent_id':2},
    {'id':8, 'title':'t2_1_1', 'parent_id':6},
]
可以扩展一下,输出以下格式吗?

t1
├t1_1
└t1_2
    └t1_2_1
t2
├t2_1
│ └t2_1_1
└t2_2  
无闻i 2017-11-28
  • 打赏
  • 举报
回复
先结贴,另开主题讨论输出格式
碧水幽幽泉 2017-11-27
  • 打赏
  • 举报
回复
引用 3 楼 njg_jh 的回复:

list = [
{'id':1,'title':'t1','parent_id':0},
{'id':2,'title':'t2','parent_id':0},
{'id':3,'title':'t1_1','parent_id':1},
{'id':4,'title':'t1_2','parent_id':1},
{'id':5,'title':'t1_2_1','parent_id':4},
{'id':6,'title':'t2_1','parent_id':2},
]

def printList(parentId, tree, spaceStr = ''):
	for x in tree:
		if x['parent_id'] == parentId:
			print(spaceStr, x['title'], sep = '')
			printList(x['id'], tree, spaceStr + ' ')

printList(0, list)
真糨糊 2017-11-27
  • 打赏
  • 举报
回复

list = [
{'id':1,'title':'t1','parent_id':0},
{'id':2,'title':'t2','parent_id':0},
{'id':3,'title':'t1_1','parent_id':1},
{'id':4,'title':'t1_2','parent_id':1},
{'id':5,'title':'t1_2_1','parent_id':4},
{'id':6,'title':'t2_1','parent_id':2},
]

def printList(parentId, tree, spaceStr = ''):
	for x in tree:
		if x['parent_id'] == parentId:
			print(spaceStr, x['title'], sep = '')
			printList(x['id'], tree, spaceStr + ' ')

printList(0, list)
真糨糊 2017-11-27
  • 打赏
  • 举报
回复
list = [ {'id':1,'title':'t1','parent_id':0}, {'id':2,'title':'t2','parent_id':0}, {'id':3,'title':'t1_1','parent_id':1}, {'id':4,'title':'t1_2','parent_id':1}, {'id':5,'title':'t1_2_1','parent_id':4}, {'id':6,'title':'t2_1','parent_id':2}, ] def printList(parentId, tree, spaceStr = ''): for x in tree: if x['parent_id'] == parentId: print(spaceStr, x['title'], sep = '') printList(x['id'], tree, spaceStr + ' ') printList(0, list)
无闻i 2017-11-27
  • 打赏
  • 举报
回复

list = [
    {'id':1, 'title':'t1', 'parent_id':0},
    {'id':2, 'title':'t2', 'parent_id':0},
    {'id':3, 'title':'t1_1', 'parent_id':1},
    {'id':4, 'title':'t1_2', 'parent_id':1},
    {'id':5, 'title':'t1_2_1', 'parent_id':4},
    {'id':6, 'title':'t2_1', 'parent_id':2},
    {'id':7, 'title':'t2_2', 'parent_id':2},
]

print('---------------------------------')
list_tree = []
# 重新排序
def list_order(pid,list):
    for x in list:
        if pid == x['parent_id']:
            list_tree.append(x)
            list_order(x['id'],list)
            
list_order(0,list)

for x in list_tree:
    print(x['title'])
这样是可以完成排序,但是不知道怎么计数,可以输出空格对应深度的空格

37,717

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧