在不少地方都能用到:多级评论python
#从数据库中获取的数据格式: 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)