各位大神好:
現在在寫一個要呈現樹狀結構的畫面,看了網路上的範例都類似此範例
資料都會寫成陣列裡面包字典,但像這些都是寫死的
而我在寫的是像電腦檔案管理或GOOGLE DRIVE 資料夾可能無限延伸下去
所以不能寫死
像上圖 ID 798 799 800就是1個資料夾裡又有一個資料夾,那可以無限延伸,所以應該是要用迴圈寫;
但實在想不到 怎麼如範例一樣,整理成一個樹狀結構QQ
各位大神好:
現在在寫一個要呈現樹狀結構的畫面,看了網路上的範例都類似此範例
資料都會寫成陣列裡面包字典,但像這些都是寫死的
而我在寫的是像電腦檔案管理或GOOGLE DRIVE 資料夾可能無限延伸下去
所以不能寫死
像上圖 ID 798 799 800就是1個資料夾裡又有一個資料夾,那可以無限延伸,所以應該是要用迴圈寫;
但實在想不到 怎麼如範例一樣,整理成一個樹狀結構QQ
可能效能不是很好XD
想法是先將每個資料夾底下一層有誰記錄下來,並把最上層資料夾抓出來
將最上層的資料夾加入,並加入他的子資料夾,當加入子資料夾時,同時也要把他底下的一起加入
import pandas as pd
import json
# 為每一個資料夾建立下一層有什麼
def add_children_col(df):
# 為每一個資料夾建立空的 list 在後面,或者用另一個 dict 也行
df['children'] = [[] for i in df.index]
# root_set 為最上層資料夾
root_set = []
for i in df.index:
# 需改成你的條件
if df['parent'][i] != 0:
df['children'][df['parent'][i]].append(i)
else:
root_set.append(i)
return root_set
# 加入他底下的資料夾
def add_children(df, tree, child_list):
for i in child_list:
tree[i] = ({'children': dict()})
# 將子子資料夾也要加入至子資料夾底下
add_children(df, tree[i]['children'], df['children'][i])
# 如果需要,將 id 設為 dataframe 的 row index
# df.set_index('id', inplace=True)
root_set = add_children_col(folder)
tree = dict()
add_children(folder, tree, root_set)
print(json.dumps(tree, indent=2))