原結構
industry_list = [
{
"parent_ind" : "女裝",
"name" : "連衣裙"
},
{
"name": "女裝"
},
{
"parent_ind" : "女裝",
"name" : "半身裙"
},
{
"parent_ind" : "女裝",
"name" : "A字裙"
},
{
"name": "數碼"
},
{
"parent_ind" : "數碼",
"name": "電腦配件"
},
{
"parent_ind" : "電腦配件",
"name": "內存"
},
]
為了取用方便,我們希望可以將其轉換為樹狀格式,例如
{
"數碼": {
"電腦配件": {
"內存" : {}
}
},
"女裝" : {
"連衣裙": {},
"半身裙": {},
"A字裙": {}
}
}
實現一個方法完成這個轉換
def convert_format(data)
實現一個方法完成這個轉換
lst1 = []
lst2 = []
d = {}
def convert_format(data):
for dic in data:
if not dic.get("parent_ind"):
d[dic["name"]] = {}
else:
lst1.append(dic)
for dic in lst1:
if dic['parent_ind'] in d:
d[dic.get('parent_ind')][dic['name']] = {}
else:
lst2.append(dic)
for dic in lst2:
for t in d.values():
if dic['parent_ind'] in t:
t[dic['parent_ind']][dic['name']] = {}
return d
print(convert_format(industry_list))
2. 遞歸簡單實現
dirs = {"C":"NULL",
"D":{"D1":"NULL",
"D2":{"D2_1":"NULL"}},
"E":{"E1":{"E1_1":{"E1_1_1":"NULL"},
"E1_2":"NULL"},
"E2":"NULL"}
}
def dirnames(dirs):
"""
這個函數用於將上述定義的 dirs 中的每一個 key 和子元素中的 key
取出並打印出來如:依次輸出 C、D、D1、D2_1、D…… 請補全代碼。
"""
# 第一種方法
# for key,values in dirs.items():
# print(key)
# if type(values) == dict:
# dirnames(values)
# 第二種方法
for k, v in dirs.items():
print(k)
# isinstance(a,b) 判斷a類是否是b類的子類或繼承b類
# issubclass(a,b) 判斷a是否是b類或b類的子類的實例對象
if isinstance(v, dict):
dirnames(v)
dirnames(dirs)