我有文件的列表形式如下:創建嵌套字典從平面列表與蟒蛇
base/images/graphs/one.png
base/images/tikz/two.png
base/refs/images/three.png
base/one.txt
base/chapters/two.txt
我想將它們轉換爲這種嵌套的字典:
{ "name": "base" , "contents":
[{"name": "images" , "contents":
[{"name": "graphs", "contents":[{"name":"one.png"}] },
{"name":"tikz", "contents":[{"name":"two.png"}]}
]
},
{"name": "refs", "contents":
[{"name":"images", "contents": [{"name":"three.png"}]}]
},
{"name":"one.txt", },
{"name": "chapters", "contents":[{"name":"two.txt"}]
]
}
麻煩是我的嘗試解決方案,給予一些輸入,如images/datasetone/grapha.png" ,"images/datasetone/graphb.png"
每個人都將結束在一個名爲「datasetone」的不同字典中,但是我希望它們在同一個父目錄中,因爲它們在同一個目錄中,我如何創建此嵌套結構而不重複父語言當共同路徑中有多個文件時,白羊座?
這裏就是我想出了和失敗:
def path_to_tree(params):
start = {}
for item in params:
parts = item.split('/')
depth = len(parts)
if depth > 1:
if "contents" in start.keys():
start["contents"].append(create_base_dir(parts[0],parts[1:]))
else:
start ["contents"] = [create_base_dir(parts[0],parts[1:]) ]
else:
if "contents" in start.keys():
start["contents"].append(create_leaf(parts[0]))
else:
start["contents"] =[ create_leaf(parts[0]) ]
return start
def create_base_dir(base, parts):
l={}
if len(parts) >=1:
l["name"] = base
l["contents"] = [ create_base_dir(parts[0],parts[1:]) ]
elif len(parts)==0:
l = create_leaf(base)
return l
def create_leaf(base):
l={}
l["name"] = base
return l
b=["base/images/graphs/one.png","base/images/graphs/oneb.png","base/images/tikz/two.png","base/refs/images/three.png","base/one.txt","base/chapters/two.txt"]
d =path_to_tree(b)
from pprint import pprint
pprint(d)
在這個例子中,你可以看到我們最終命名爲「基地」,因爲在列表文件中儘可能多的詞典,但只有一個是必要的,子目錄應該列在「內容」數組中。
請檢查你的示例輸出 - 「內容」:[「name」:「one.png」]'沒有意義 – jonrsharpe
爲什麼one.png沒有內容但是one.txt呢?不應該one.txt不被視爲一個目錄? – Matthew
@jonrsharpe完成 – mike