首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文件名列表转换为树状字典

将文件名列表转换为树状字典
EN

Stack Overflow用户
提问于 2013-07-16 18:23:13
回答 2查看 1.8K关注 0票数 3

我有一个文件名列表,并希望将它们打印为目录树:

代码语言:javascript
复制
files = ["foo/bar/Bla", "foo/bar/Foo", "foo/foo/Bsdf", "xsd/sdafd/saasf"]
[...]
# output should look like this 
output = ['foo' : ['bar' : ['Bla', 'Foo'], 'foo' : ['Bsdf']], 'xsd' : ['sdafd' : ['saasf']]]

我尝试了不同的方法,但我不能比这样做更进一步:

代码语言:javascript
复制
['foo/bar': ['Bla', 'Foo'], 'foo/foo/': ['Bsdf'], 'xsd/sdafd' : ['saasf']]

或者类似的..。

EN

回答 2

Stack Overflow用户

发布于 2013-07-16 19:24:58

下面的代码对您的输入起作用:

代码语言:javascript
复制
def recurse_setdefault(res, array):
    if len(array) == 0:
        return
    elif len(array) == 1:
        res.append(array[0])
    else:
        recurse_setdefault(res.setdefault(array[0], [] if len(array) == 2 else {}), array[1:])

res = {}
for f in files:
    recurse_setdefault(res, f.split("/"))

结果是:

代码语言:javascript
复制
{'foo': {'bar': ['Bla', 'Foo'], 'foo': ['Bsdf']}, 'xsd': {'sdafd': ['saasf']}}
票数 1
EN

Stack Overflow用户

发布于 2013-07-16 19:32:37

无法获得一行代码

代码语言:javascript
复制
files = ["foo/bar/Bla", "foo/bar/Foo", "foo/foo/Bsdf", "xsd/sdafd/saasf"]

dict_add = lambda x, y={}: dict_add(x[:-1], y).setdefault(x[-1], {}) if(x) else y
base_dict = {}
map(lambda x: dict_add(x, base_dict), [path.split("/") for path in files])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17674052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档