在不少地方都能用到:多級評論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)