評論操做

評論操做

在不少地方都能用到:多級評論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)
相關文章
相關標籤/搜索