I am working on a peice of code where i have some input data in this format:
_input = [
('Cat 1', 'Sub Cat 1', 'lvl_3_cat-1'),
('Cat 1', 'Sub Cat 2', 'lvl_3_cat-2'),
('Cat 2', 'Sub Cat 3', 'lvl_3_cat-3')
]
I need to convert the following list of catefories into a parent child nested list which can be iterated to get the list of nested relations.
Expected Output
expected output = [{
"name": 'Cat 1',
"children": [{
"name": 'Sub Cat 1',
"children": [{
"name": 'lvl_3_cat-1',
"children": []
}]
},{
"name": 'Sub Cat 2',
"children": [{
"name": 'lvl_3_cat-2',
"children": []
}]
}]
},{
"name": 'Cat 2',
"children": [{
"name": 'Sub Cat',
"children": [{
"name": 'lvl_3_cat-3',
"children": []
}]
}]
}]
Input in this example has a 3 level nesting but this can be dynamic i.e upto n.
My current code
def dsearch(lod, name):
for e in lod:
if e["name"] == name:
return e
else:
return dsearch(e["children"], name)
return {
'name': name,
'children': []
}
data = []
lvl_products = [
('Cat 1', 'Sub Cat 1', 'lvl_3_cat-1'),
('Cat 1', 'Sub Cat 2', 'lvl_3_cat-2'),
('Cat 2', 'Sub Cat 3', 'lvl_3_cat-3')
]
for lvl_product in lvl_products:
print(lvl_product)
parent = None; main_parent = None
for _ in range(len(lvl_product)):
element = dsearch(data, lvl_product[_])
print(element)
if parent:
parent['children'].append(element)
if main_parent is None:
main_parent = parent
parent = element
data.append(main_parent)
print(data)
My current output
[
{
"children": [
{
"children": [
{
"children": [],
"name": "lvl_3_cat-1"
},
{
"children": [],
"name": "lvl_3_cat-2"
}
],
"name": "Sub Cat 1"
},
{
"children": [
{
"children": [],
"name": "lvl_3_cat-1"
},
{
"children": [],
"name": "lvl_3_cat-2"
}
],
"name": "Sub Cat 1"
}
],
"name": "Cat 1"
},
{
"children": [
{
"children": [
{
"children": [],
"name": "lvl_3_cat-1"
},
{
"children": [],
"name": "lvl_3_cat-2"
}
],
"name": "Sub Cat 1"
},
{
"children": [
{
"children": [],
"name": "lvl_3_cat-1"
},
{
"children": [],
"name": "lvl_3_cat-2"
}
],
"name": "Sub Cat 1"
}
],
"name": "Cat 1"
}
]