1. 程式人生 > >Django多級評論

Django多級評論

new {} highlight child 發現 有變 數據 基礎 end

一、原理

#多級評論原理簡單原理,弄完之後發現基礎白學了
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},
]
#python裏面的apend之類的東西都是引用的原來數據的內從地址,對原數據進行操作的話
#我們引用的數據也會發生一樣的變化(字典列表之類的)

#騙子的方法
# for i in msg_list:
#     i[‘child‘]=[]
# for i in range(len(msg_list)-1,-1,-1):
#     if msg_list[i][‘parent_id‘]:
#         msg_list[msg_list[i][‘parent_id‘] - 1][‘child‘].append(msg_list[i])
# new_msg_list = [i for i in msg_list if i[‘parent_id‘] is None]
# print(new_msg_list)

#老師講的方法
# v=[row.setdefault(‘child‘,[]) for row in msg_list] #這和地下的第一個for循環的作用是一樣的,給每一個元素加一個‘child‘:[]
# print(msg_list)
#如果我們想加快索引(快點找到數據的話)就建一個字典的數據結構
msg_list_dict={} #加快索引,節省時間
for item in msg_list:
    item[‘child‘]=[]
    msg_list_dict[item[‘id‘]]=item #字典中key為item[‘id‘],value為item
    #把字典數據結構填上數據,能夠加快索引,而且我們數據還是占得原來的內從空間
    #我們只是引用了數據的內容空間,所以不存在新的數據結構浪費空間一說
result=[]
for item in msg_list:
    pid=item[‘parent_id‘]
    if pid: #如果parent_id不為空,說明它是子級,要把自己加入對應的父級
        msg_list_dict[pid][‘child‘].append(item)
    else: #如果為空,說明他是父級,要把它單獨領出來用
        result.append(item)
#result就是我們最終要的結果,因為這裏面全是引用,所有數據的內存地址都沒有變
#只不過被多個數據結構引用了而已
print(result)

  

Django多級評論