Просто go через список и добавление имен каждой строки, которую вы разбиваете на символ sla sh. Вы можете использовать setdefault (), чтобы гарантировать, что словарь следующего уровня существует (т.е. автоматически создавать записи, как вы go)
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 будут соответствовать их исходному относительному порядку в списке строк
Если вы хотите, чтобы элементы в каждом словаре отображались в алфавитно-цифровом порядке, вы можете изменить l oop следующим образом:
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': {}} }
}