python 後臺資料以層級形式傳遞給前臺
阿新 • • 發佈:2018-12-26
一朋友給了這麼個需求,類似分類資料夾,資料夾下面又可以建立子資料夾,子資料夾下面還能建立資料夾。
在通過前臺查詢的時候,後臺返回的資料,要展示成層級巢狀的格式,如下面的格式。
後臺通過sql查詢的的資料結構為
a=[ {"id": 1, "text": "a1", "parentId": "0"}, {"id": 2, "text": "a1-1", "parentId": "1"}, {"id": 3, "text": "a1-2", "parentId": "1"}, {"id": 4, "text": "a1-3", "parentId": "1"}, {"id": 5, "text": "a2", "parentId": "0"}, {"id": 6, "text": "a2-1", "parentId": "5"}, {"id": 7, "text": "a2-2", "parentId": "5"}, {"id": 8, "text": "a2-3", "parentId": "5"}, {"id": 9, "text": "a2-1-1", "parentId": "6"}, {"id": 10, "text": "a2-1-2", "parentId": "6"}, {"id": 10, "text": "a2-2-2", "parentId": "6"}, {"id": 11, "text": "a3", "parentId": "0"}, {"id": 12, "text": "a3-1", "parentId": "5"}, ]
這樣就要將這些資料做處理,讓子資料夾資料巢狀在主資料夾裡面,巢狀後的格式為
思路:前端控制,層級最多三級,先將三級的資料插入到二級,再將二級的寫入到一級,具體程式碼如下(只求實現,沒有注意寫法格式和做優化,以後有時間再弄){'text': 'a2', 'children': [{'text': 'a2-1', 'children': [{'text': 'a2-1-1', 'id': 9, 'parentId': '6'}, {'text': 'a2-1-2', 'id': 10, 'parentId': '6'}], 'id': 6, 'parentId': '5'}, {'text': 'a2-2', 'children': [{'text': 'a2-2-2', 'id': 10, 'parentId': '6'}], 'id': 7, 'parentId': '5'}, {'text': 'a2-3', 'children': [], 'id': 8, 'parentId': '5'}], 'id': 5, 'parentId': '0'}
a=[ {"id": 1, "text": "a1", "parentId": "0"}, {"id": 2, "text": "a1-1", "parentId": "1"}, {"id": 3, "text": "a1-2", "parentId": "1"}, {"id": 4, "text": "a1-3", "parentId": "1"}, {"id": 5, "text": "a2", "parentId": "0"}, {"id": 6, "text": "a2-1", "parentId": "5"}, {"id": 7, "text": "a2-2", "parentId": "5"}, {"id": 8, "text": "a2-3", "parentId": "5"}, {"id": 9, "text": "a2-1-1", "parentId": "6"}, {"id": 10, "text": "a2-1-2", "parentId": "6"}, {"id": 10, "text": "a2-2-2", "parentId": "6"}, {"id": 11, "text": "a3", "parentId": "0"}, {"id": 12, "text": "a3-1", "parentId": "5"}, ] "先分組" teams=[] for i in a: if i['parentId']=='0': teams.append(a.index(i)) # teams.append(10000000) "每次取兩個數值出來" for i in teams: if i==teams[-1]: value = a[i:] else: value = a[i:teams[teams.index(i) + 1]] # 需要處理的集合,裡面包含了完整的一個 # print value "list中分組,把同組的先歸類到一起" for i in value: if i['parentId']=='0': i['children']=[] '迴圈第一層' folder_2=[] folder_3=[] for i in value: if i['text'].count('-')==1: folder_2.append(i) elif i['text'].count('-')==2: folder_3.append(i) if folder_3 != []: "根據三級選單資訊,插入對應的二級" for i in folder_2: i['children']=[] for j1 in folder_3: if j1['text'][:4]==i['text']: i['children'].append(j1) # print folder_2 "把二級寫到一級" print 'f',folder_2 print 'v',value[0] value[0]['children']=folder_2 print value[0]
輸出的內容為
f [{'text': 'a1-1', 'id': 2, 'parentId': '1'}, {'text': 'a1-2', 'id': 3, 'parentId': '1'}, {'text': 'a1-3', 'id': 4, 'parentId': '1'}]
v {'text': 'a1', 'children': [], 'id': 1, 'parentId': '0'}
{'text': 'a1', 'children': [{'text': 'a1-1', 'id': 2, 'parentId': '1'}, {'text': 'a1-2', 'id': 3, 'parentId': '1'}, {'text': 'a1-3', 'id': 4, 'parentId': '1'}], 'id': 1, 'parentId': '0'}
f [{'text': 'a2-1', 'children': [{'text': 'a2-1-1', 'id': 9, 'parentId': '6'}, {'text': 'a2-1-2', 'id': 10, 'parentId': '6'}], 'id': 6, 'parentId': '5'}, {'text': 'a2-2', 'children': [{'text': 'a2-2-2', 'id': 10, 'parentId': '6'}], 'id': 7, 'parentId': '5'}, {'text': 'a2-3', 'children': [], 'id': 8, 'parentId': '5'}]
v {'text': 'a2', 'children': [], 'id': 5, 'parentId': '0'}
{'text': 'a2', 'children': [{'text': 'a2-1', 'children': [{'text': 'a2-1-1', 'id': 9, 'parentId': '6'}, {'text': 'a2-1-2', 'id': 10, 'parentId': '6'}], 'id': 6, 'parentId': '5'}, {'text': 'a2-2', 'children': [{'text': 'a2-2-2', 'id': 10, 'parentId': '6'}], 'id': 7, 'parentId': '5'}, {'text': 'a2-3', 'children': [], 'id': 8, 'parentId': '5'}], 'id': 5, 'parentId': '0'}
f [{'text': 'a3-1', 'id': 12, 'parentId': '5'}]
v {'text': 'a3', 'children': [], 'id': 11, 'parentId': '0'}
{'text': 'a3', 'children': [{'text': 'a3-1', 'id': 12, 'parentId': '5'}], 'id': 11, 'parentId': '0'}
基本滿足了要求。