python—引用类型的巧用

mac2024-01-30  26

先有一个列表,装了很多字典,我们希望所有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': [] }]
最新回复(0)