多级评论

Posted Python

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多级评论相关的知识,希望对你有一定的参考价值。

# data=[
#     [11,22,33],
#     [44,55,66]
# ]
# data[0].append(data[1])
# print(data)
# data[1].append(77)
#
# 由于[11, 22, 33, [44, 55, 66, 77]]和[[11, 22, 33, [44, 55, 66, 77]], [44, 55, 66, 77]]
#
# 引用的是同一块内存地址,所以谁添加了内容对应的也跟随添加


# data=[
#       {‘k1‘:‘v1‘},
#       {‘k2‘:‘v2‘}
#       ]
#
# for item in data:
#     item[‘kk‘]=‘vv‘
#
#
# # python里面列表和字典引用的是引用类型,当我们拿到地址被操作了,会发生级联变化;如果想要再独立一份就需要copy()
#
# msg_list = [
#    {‘id‘:1,‘content‘:‘xxx‘,‘parent_id‘:None},
#    {‘id‘:2,‘content‘:‘xxx‘,‘parent_id‘:None},
#    {‘id‘:3,‘content‘:‘xxx‘,‘parent_id‘:None},
#    {‘id‘:4,‘content‘:‘xxx‘,‘parent_id‘:1},
#    {‘id‘:5,‘content‘:‘xxx‘,‘parent_id‘:4},
#    {‘id‘:6,‘content‘:‘xxx‘,‘parent_id‘:2},
#    {‘id‘:7,‘content‘:‘xxx‘,‘parent_id‘:5},
#    {‘id‘:8,‘content‘:‘xxx‘,‘parent_id‘:3},
# ]
# # v=[row.setdefault(‘child‘)  for row in msg_list]
# #
# # #注意列表生成公式里面 不能出现=等赋值操作,可以使用方法
# # print(msg_list)
#
# #方式2
#
# msg_list_dict={}
# # msg_list_dict={
# # 1, {‘id‘:1,‘content‘:‘xxx‘,‘parent_id‘:None},
# # 2, {‘id‘:2,‘content‘:‘xxx‘,‘parent_id‘:None},
# #               }
# #字典的在存储的时候,键会转换成一个hashs值,这个hash值和内存地址相关,# 无论字典里的键值对有多大,都可以一次的寻找到key对应的value
# #字典查询就是数据库里的hansh 索引,直接拿到key就可以快得惊人的获取到value
# #无需向列表那样 查询 是 一个个顺序 遍历
#
# #所以定义一个字典 方便我们查找 评论信息,而且因为Python是数据引用类型,相同数据引用一块内存,也不会占用内存
# for item in msg_list:
#     item[‘child‘]=[]
#     msg_list[item[‘id‘]]=item
#
# #程序运行到此处,会有两个msg_list   msg_list_dict
# ret=[]
# for item in  msg_list:
#     pid=item[‘parent_id‘]
#     if pid:
#         msg_list[pid][‘child‘].apend(item)
#     else:
#         ret.append(item)

msg_list = [
    {id:1,content:xxx,parent_id:None},
    {id:2,content:xxx,parent_id:None},
    {id:3,content:xxx,parent_id:None},
    {id:4,content:xxx,parent_id:1},
    {id:5,content:xxx,parent_id:4},
    {id:6,content:xxx,parent_id:2},
    {id:7,content:xxx,parent_id:5},
    {id:8,content:xxx,parent_id:3},
]
msg_dict={}

#1、给所以 评论设置一个 child键=[空列表的值] [row.setdefault(‘child‘,[]) for row in msg_list] 列表生成器方法

#3、定义一个查询用的字典
for item in msg_list:
    item[child]=[]
    msg_dict[item[id]]=item



#2、把带有‘parent_id‘的键的字典,添加到对应的父字典里(你会想到再次遍历msg_list,但是多层循环效率低下,于是重新定义一个字典)
for item in msg_list:
    pid=item[parent_id]
    if pid:
        msg_dict[pid][child].append(item)


# 4、找出根评论·
root_coment=[]
for item in msg_list:
    if not item[parent_id]:
        root_coment.append(item)

for item in  root_coment:
    print(item)

 

以上是关于多级评论的主要内容,如果未能解决你的问题,请参考以下文章

Django多级评论

多级评论

django(19)多级评论树结构

多级评论的实现

报障系统之多级评论

报障系统之多级评论前戏