评论操作
评论操作
在很多地方都能用到:多级评论
#从数据库中获取的数据格式:
comment_list = [
{'id': 1, 'content': 'Python', 'user': '阿松大', 'parent_id': None},
{'id': 2, 'content': 'Java', 'user': '阿松大', 'parent_id': None},
{'id': 3, 'content': 'PHP', 'user': '阿松大', 'parent_id': None},
{'id': 4, 'content': '你hh', 'user': '按文', 'parent_id': 1},
{'id': 5, 'content': '阿萨德', 'user': '豆腐干', 'parent_id': 1},
{'id': 6, 'content': '风格和', 'user': '豆腐干', 'parent_id': 4},
{'id': 7, 'content': '繁华的', 'user': '微软', 'parent_id': 2},
{'id': 8, 'content': '刀锋', 'user': '微软', 'parent_id': 3},
{'id': 9, 'content': '我想静静', 'user': '阿松大', 'parent_id': 8},
{'id': 10, 'content': '我想静静', 'user': '全文', 'parent_id': None},
{'id': 11, 'content': '我是符符', 'user': 'xiaopang', 'parent_id': 6},
]
#要改成这样的格式去使用:
[
{
'id': 1,
'content': 'Python',
'user': '阿松大',
'parent_id': None,
'son':[{
'id': 4,
'content': '你hh',
'user': '按文',
'parent_id': 1,
'son':[{
'id': 6,
'content': '风格和',
'user': '豆腐干',
'parent_id': 4,
}]
},{
'id': 5,
'content': '阿萨德',
'user': '豆腐干',
'parent_id': 1
}]
},{
'id': 2,
'content': 'Java',
'user': '阿松大',
'parent_id': None
},{
'id': 3,
'content': 'PHP',
'user': '阿松大',
'parent_id': None
}
]
#期间可使用循环嵌套方法
ret = []
for i in comment_list:
if not i['parent_id']:
#基础评论
i.append("son")=[]
ret.append(i)
else:
#回复评论
for x in ret:
if x['id'] == i['parent_id']
ret['son'].append(i)
print(ret)
#如果评论嵌套层级多就使用递归:
'''
注:python中字典和列表都是引用类型。引用类型中数组或字典添加自身数组或字典数据时,相同属性的键值会被同时修改,(当出现多元字典时,相同名字的键值在进行修改时会被同时修改成为新的相同的键值)
'''
ret = []
for i in comment_list:
if not i['parent_id']:
#基础评论
i.append("son")=[]
ret.append(i)
else:
#回复评论
obj = digui(ret,i)
print(ret)
def digui(ret,i):
for r in ret:
if r['id'] == i['parent_id']:
ret['son'].append(i)
else:
obj = digui(r['son'],i)
#升级版,但是性能不高
#author:wylkjj
#date:2019/12/20
#-*- coding:utf-8 -*-
comment_list = [
{'id': 1, 'content': 'Python', 'user': '阿松大', 'parent_id': None},
{'id': 2, 'content': 'Java', 'user': '阿松大', 'parent_id': None},
{'id': 3, 'content': 'PHP', 'user': '阿松大', 'parent_id': None},
{'id': 4, 'content': '你hh', 'user': '按文', 'parent_id': 1},
{'id': 5, 'content': '阿萨德', 'user': '豆腐干', 'parent_id': 1},
{'id': 6, 'content': '风格和', 'user': '豆腐干', 'parent_id': 4},
{'id': 7, 'content': '繁华的', 'user': '微软', 'parent_id': 2},
{'id': 8, 'content': '刀锋', 'user': '微软', 'parent_id': 3},
{'id': 9, 'content': '我想静静', 'user': '阿松大', 'parent_id': 8},
{'id': 10, 'content': '我想静静', 'user': '全文', 'parent_id': None},
{'id': 11, 'content': '我是符符', 'user': 'xiaopang', 'parent_id': 6},
]
ret = []
for i in comment_list:
i.update({'son':[]})
for r in comment_list:
comment_line_parent_id = r['parent_id']
if not comment_line_parent_id:
ret.append(r)
else:
for t in comment_list:
if comment_line_parent_id == t['id']:
t['son'].append(r)
print(ret)
print(comment_list)#此列表也被修改了
#最强版:高效率--哈希
'''
字典
dict={'asd':[,'asd']}
dict.get('asd')取到值
'''
ret = []
comment_dict = {}
for line in comment_list:
line.update({'son':[]}) #给数据加键值
comment_dict[line['id']] = line #添加到字典中
for r in comment_list:
comment_line = r
comment_line_parent_id = comment_line['parent_id']
if not comment_line_parent_id:
ret.append(r)
else:
comment_dict[comment_line_parent_id]['son'].append(r)
print(ret)