修改了Python结构的前序树遍历
嗨,我试图表示一个修改的前序树遍历 作为Python结构,我可以输出到json,因为我当前的目标是在 假设我有一张表,如图所示 (在我的例子中,每一行也有一个parent_id)如下 jstree的Json格式如下修改了Python结构的前序树遍历,python,jstree,mptt,Python,Jstree,Mptt,嗨,我试图表示一个修改的前序树遍历 作为Python结构,我可以输出到json,因为我当前的目标是在 假设我有一张表,如图所示 (在我的例子中,每一行也有一个parent_id)如下 jstree的Json格式如下 [ { "data" : "Root", "children" : [ { "data":"Articles", "children : [
[
{
"data" : "Root",
"children" : [
{
"data":"Articles",
"children : [
{"data":"Fiction"},
{"data":"Reference"}
]
},
{"data":"Portfolio"},
{"data":"Contact"}]
},
]
如何将上表转换为Python格式以
输出这个json
我想用嵌套字典
如下
但我不确定我需要的算法
非常感谢您的帮助
谢谢你真的应该试着自己做,展示你做了什么以及哪里不起作用。但我有几分钟空闲,所以 要解析表,可以使用模块。我把这个留给你 可能不是最佳解决方案,但这样做可以:
datain = (
(1,'Root',1,16,-1),
(2,'Articles',2,11,1),
(5,'Fiction',3,8,2),
(7,'Fantasy',4,5,5),
(8,'Sci-fi',6,7,5),
(6,'Reference',9,10,2),
(3,'Portfolio',12,13,1),
(4,'Contact',14,15,1),
)
def convert_to_json(data):
node_index = dict()
parent_index = dict()
for node in data:
node_index[node[0]] = node
parent_index.setdefault(node[4],[]).append(node)
def process_node(index):
result = { 'data' : node_index[index][1] }
for node in parent_index.get(index,[]):
result.setdefault('children',[]).append(process_node(node[0]))
return result
node = process_node(1)
return [node]
返回:
[
{
'data': 'Root',
'children': [
{
'data': 'Articles',
'children': [
{
'data': 'Fiction',
'children': [
{ 'data': 'Fantasy' },
{ 'data': 'Sci-fi' }
]
},
{ 'data': 'Reference' }
]
},
{ 'data': 'Portfolio' },
{ 'data': 'Contact' }
]
}
]
谢谢我确实试了很长时间,而不是几分钟。我把自己弄得一团糟。谢谢最后我稍微修改了一下,允许添加兄弟姐妹。我最初尝试的是一种非递归方法,这就是我遇到问题的原因。如果有人有一个非递归的解决方案,出于好奇,我很想看看。@isedev,我有没有办法给你一些这个算法的奖励点?这是一部精彩绝伦的巨著
datain = (
(1,'Root',1,16,-1),
(2,'Articles',2,11,1),
(5,'Fiction',3,8,2),
(7,'Fantasy',4,5,5),
(8,'Sci-fi',6,7,5),
(6,'Reference',9,10,2),
(3,'Portfolio',12,13,1),
(4,'Contact',14,15,1),
)
def convert_to_json(data):
node_index = dict()
parent_index = dict()
for node in data:
node_index[node[0]] = node
parent_index.setdefault(node[4],[]).append(node)
def process_node(index):
result = { 'data' : node_index[index][1] }
for node in parent_index.get(index,[]):
result.setdefault('children',[]).append(process_node(node[0]))
return result
node = process_node(1)
return [node]
[
{
'data': 'Root',
'children': [
{
'data': 'Articles',
'children': [
{
'data': 'Fiction',
'children': [
{ 'data': 'Fantasy' },
{ 'data': 'Sci-fi' }
]
},
{ 'data': 'Reference' }
]
},
{ 'data': 'Portfolio' },
{ 'data': 'Contact' }
]
}
]