根据父ID将字典列表转换为字典树

时间:2016-05-10 05:44:22

标签: python list dictionary

我想以这种方式创建字典列表,每个元素都有父ID,它应该是父元素的子元素。

假设我们有一个python列表,其中包含多个词典。

[{
    "id": 1,
    "title": "node1",
    "parent": null
},
{
    "id": 2,
    "title": "node2",
    "parent": 1
},
{
    "id": 3,
    "title": "node3",
    "parent": 1
},
{
    "id": 4,
    "title": "node4",
    "parent": 2
},
{
    "id": 5,
    "title": "node5",
    "parent": 2
}]

我想根据父键将此列表转换为树。等,

    [{
      'id':1,
      'title':'node1',  
      'childs':[  
         {  
            'id':2,
            'title':'node2'
            'childs':[  
               {  
                  'id':4,
                  'title':'node4',
                  'childs': []
               },
               {  
                  'id':5,
                  'title':'node5',
                  'childs': []
               }
            ]
         },
         {  
            'id':3,
            'title':'node3'
            'childs':[]
         }
      ]
   }]

2 个答案:

答案 0 :(得分:2)

data = [{
  "id": 1,
  "title": "node1",
  "parent": "null"
  },
  { "id": 2,
    "title": "node2",
    "parent": "null"
  },
{
    "id": 2,
    "title": "node2",
    "parent": 1
},
{
    "id": 3,
    "title": "node3",
    "parent": 1
},
{
    "id": 4,
    "title": "node4",
    "parent": 2
},
{
    "id": 5,
    "title": "node5",
    "parent": 2
}]
parent_data=[]
for keys in data:
  if keys['parent'] == "null":
     keys['childs']=[]
     parent_data.append(keys)

for keys in data:
  for key in parent_data:
     if key['id'] == keys['parent']:
         key['childs'].append(keys)



print parent_data

答案 1 :(得分:0)

k = [{
    "id": 1,
    "title": "node1",
    "parent": "null"
},
{
    "id": 2,
    "title": "node2",
    "parent": 1
},
{
    "id": 3,
    "title": "node3",
    "parent": 1
},
{
    "id": 4,
    "title": "node4",
    "parent": 2
},
{
    "id": 5,
    "title": "node5",
    "parent": 2
}]

result, t = [], {}

for i in k:
    i['childs'] = []
    if i['parent'] == 'null':
        del i['parent']
        result.append(i)
        t[1] = result[0]
    else:
        t[i['parent']]['childs'].append(i)
        t[i['id']] = t[i['parent']]['childs'][-1]
        del t[i['parent']]['childs'][-1]['parent']

print result