编写一个程序将数据转换为所需的形式。但如果嵌套增加,程序就需要补充一个关卡。递归本身就存在,但我不知道如何优化程序。
有一个字典列表(见下文)
data = [
{"id": "000", "name": "name_1", "status": "pass", "parent_id": None},
{"id": "000_0", "name": "name_2", "status": "pass", "parent_id": None},
{"id": "111", "name": "child_1", "status": "pass", "parent_id": "000"},
{"id": "111_1", "name": "child_1_1", "status": "pass", "parent_id": "111"},
{"id": "111_2", "name": "child_1_2", "status": "pass", "parent_id": "111"}
]
由于需要转换为以下形式
[
{
'key': '0',
'data': {
'name': 'name_1',
'id': '000',
"status": "pass"
},
'children': [
{
"key": '0-0',
"data": {
'name': 'child_1',
'id': '111',
"status": "pass"
},
'children': [
{
'key': '0-0-0',
'data': {
'name': 'child_1_1',
'id': '111_1',
"status": "pass"
},
'children': [ ]
},
{
'key': '0-0-1',
'data': {
'name': 'child_1_2',
'id': '111_2',
"status": "pass"
},
'children': [ ]
}
]
}
]
},
{
'key': '1',
'data': {
'name': 'name_2',
'id': '000_0',
"status": "pass"
},
'children': [ ]
}
]
我编写了以下代码进行转换。
def _tree(tests):
arr_tree = []
ind_key = 0
for i in tests:
if i[2] == None:
ind_key += 1
list_tree = {
'key': f"{ind_key}",
'data': {
'id': i[0],
'name': i[1],
'parent_id': i[2]
},
"children": []
}
arr_tree.append(list_tree)
ind_key2 = 0
for i in tests:
for level_2 in arr_tree:
if i[2] == level_2['data']['id']:
ind_key2 += 1
list_tree = {
'key': f"{level_2['key']}-{ind_key2}",
'data': {
'id': i[0],
'name': i[1],
'parent_id': i[2]
},
"children": []
}
level_2["children"].append(list_tree)
ind_key3 = 0
for i in tests:
for level_2 in arr_tree:
for level_3 in level_2["children"]:
if i[2] == level_3['data']['id']:
ind_key3 += 1
list_tree = {
'key': f"{level_3['key']}-{ind_key3}",
'data': {
'id': i[0],
'name': i[1],
'parent_id': i[2]
},
"children": []
}
level_3["children"].append(list_tree)
return arr_tree

