- 先有一个列表,装了很多字典,我们希望所有parent_id不为None的都将其放到对应id的键children下,并递归执行,实现一个多级字典,但递归是比较耗内存的,我们将使用引用类型的特殊方法来实现。
# 原始列表
comment_list = [
{'id': 1, 'user': '杀杀杀', 'comment': '我丢', 'parent_id': None},
{'id': 2, 'user': '杀杀杀', 'comment': '我丢', 'parent_id': None},
{'id': 3, 'user': '杀杀杀', 'comment': '我丢', 'parent_id': None},
{'id': 4, 'user': '杀杀杀', 'comment': '我丢', 'parent_id': 2},
{'id': 5, 'user': '杀杀杀', 'comment': '我丢', 'parent_id': 4},
{'id': 6, 'user': '杀杀杀', 'comment': '我丢', 'parent_id': 3},
{'id': 7, 'user': '杀杀杀', 'comment': '我丢', 'parent_id': None},
{'id': 8, 'user': '杀杀杀', 'comment': '我丢', 'parent_id': 5},
{'id': 9, 'user': '杀杀杀', 'comment': '我丢', 'parent_id': 8},
]
# 最后存放结果的列表
comments = []
# 将列表转化为字典,并用id作为comment_dict的键和添加一个children键值对
comment_dict = {}
for _ in comment_list:
_.update({'children': []})
comment_dict[_['id']] = _
- 转化为字典之后的结果:
print(comment_dict)
"""
{
1: {
'id': 1,
'user': '杀杀杀',
'comment': '我丢',
'parent_id': None,
'children': []
},
2: {
'id': 2,
'user': '杀杀杀',
'comment': '我丢',
'parent_id': None,
'children': []
},
3: {
'id': 3,
'user': '杀杀杀',
'comment': '我丢',
'parent_id': None,
'children': []
},
4: {
'id': 4,
'user': '杀杀杀',
'comment': '我丢',
'parent_id': 2,
'children': []
},
5: {
'id': 5,
'user': '杀杀杀',
'comment': '我丢',
'parent_id': 4,
'children': []
},
6: {
'id': 6,
'user': '杀杀杀',
'comment': '我丢',
'parent_id': 3,
'children': []
},
7: {
'id': 7,
'user': '杀杀杀',
'comment': '我丢',
'parent_id': None,
'children': []
},
8: {
'id': 8,
'user': '杀杀杀',
'comment': '我丢',
'parent_id': 5,
'children': []
},
9: {
'id': 9,
'user': '杀杀杀',
'comment': '我丢',
'parent_id': 8,
'children': []
}
}
"""
- 接下来修改这个字典中有children值的项,将对应的children加入到键值对中,
for v in comment_dict.values():
if not v['parent_id']
# 将parent_id为None,即这里只放入所有第一级元素
comments.append(v)
else:
"""注意在这里只修改了原来字典中的children值"""
comment_dict[v['parent_id']]['children'].append(v)
print(comments)
当我们打印comments时会发现已经实现了多级字典
[{
'id': 1,
'user': '杀杀杀',
'comment': '我丢',
'parent_id': None,
'children': []
}, {
'id': 2,
'user': '杀杀杀',
'comment': '我丢',
'parent_id': None,
'children': [{
'id': 4,
'user': '杀杀杀',
'comment': '我丢',
'parent_id': 2,
'children': [{
'id': 5,
'user': '杀杀杀',
'comment': '我丢',
'parent_id': 4,
'children': [{
'id': 8,
'user': '杀杀杀',
'comment': '我丢',
'parent_id': 5,
'children': [{
'id': 9,
'user': '杀杀杀',
'comment': '我丢',
'parent_id': 8,
'children': []
}]
}]
}]
}]
}, {
'id': 3,
'user': '杀杀杀',
'comment': '我丢',
'parent_id': None,
'children': [{
'id': 6,
'user': '杀杀杀',
'comment': '我丢',
'parent_id': 3,
'children': []
}]
}, {
'id': 7,
'user': '杀杀杀',
'comment': '我丢',
'parent_id': None,
'children': []
}]