簡體   English   中英

如何從 Python 中的字符串列表創建目錄樹?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM