[英]How to create directory tree from a list of strings in Python?
我想寫一個模仿 Python 中的文件夾結構的函數。 給定一個字符串列表,我想創建一個文件夾和子文件夾樹。 例如:
['啤酒','葡萄酒','啤酒/ipa/石頭','葡萄酒/紅/赤霞珠']
將 output 字典與以下內容:
{
'beers': {
'ipa': {
'stone': {}
}
},
'wines': {
'red': {
'cabernet': {}
}
}
}
只需 go 通過您列出並添加您在斜杠字符上拆分的每個字符串的名稱。 您可以使用 setdefault() 來確保存在下一級字典(即,隨手自動創建條目)
strings = ['beers', 'wines', 'beers/ipa/stone', 'wines/red/cabernet']
directory = dict()
for path in strings:
d = directory
for name in path.split("/"):
d = d.setdefault(name,dict())
print(directory)
{'beers':
{ 'ipa': {'stone': {}} },
'wines':
{'red': {'cabernet': {}} }
}
使用 Python 3,每個 dict 中的項目順序將對應於它們在字符串列表中的原始相對順序
如果您希望每個字典中的項目以字母數字順序出現,您可以像這樣更改循環:
directory = dict()
for path in sorted(s.split("/") for s in strings):
d = directory
for name in path:
d = d.setdefault(name,dict())
如果你喜歡遞歸函數,這里有一個做同樣事情的簡單函數(但效率較低):
def makeTree(strings, separator="/", tree=None):
tree = tree or dict()
for name,*subs in (s.split(separator,1) for s in strings):
tree[name] = makeTree(subs, separator, tree.get(name))
return tree
d = makeTree(strings)
print(d)
{'beers':
{ 'ipa': {'stone': {}} },
'wines':
{'red': {'cabernet': {}} }
}
x = ['beers', 'wines', 'beers/ipa/stone', 'wines/red/cabernet'] def add_items(d, items): if len(items) == 1: if items[0] in d: return else: d[items[0]] = dict() else: if items[0] not in d: d[items[0]] = dict() add_items(d[items[0]], items[1:]) out = dict() for item in x: items = item.split("/") add_items(out, items) print(out) {'wines': {'red': {'cabernet': {}}}, 'beers': {'ipa': {'stone': {}}}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.