我有一个路径名列表:
www.example.com/a/b/c/d
www.example.com/a/b/e/f
www.example.com/a/c/d/f
我希望将其转换为字典:
a : {
b : {
c : {
d : {}
}
e : {
f : {}
}
c : {
d : {
f : {}
}
}
}
我写了非常天真的代码,但我希望自动化它,任何想法?
keys = paths.replace("www.example.com/", "").split("/")
test = {}
for key in keys:
for i, k in enumerate(key):
if i == 0:
test.setdefault(k, {})
if i == 1:
test[key[0]].setdefault(k, {})
if i == 2:
test[key[0]][key[1]].setdefault(k, {})
if i == 3:
test[key[0]][key[1]][key[2]].setdefault(k, {})
答案 0 :(得分:1)
我会给出一个解决方案来帮助你思考递归,如何合并多个路径的结果留给读者练习。
def fun(path):
if len(path) == 0:
return
if len(path) == 1:
return path[0]
return {path[0]: fun(path[1:])}
path = "www.example.com/a/b/c/d".split("/")
d = fun(path)
print d
答案 1 :(得分:0)
这是经典的递归:
def add_nodes(root, nodes):
if nodes:
node = nodes.pop(0)
root.setdefault(node, {})
add_nodes(root[node], nodes)
示例:
>>> addresses = ['www.example.com/a/b/c/d', 'www.example.com/a/b/e/f', 'www.example.com/a/c/d/f']
>>> elts = [addr.split('/')[1:] for addr in addresses]
>>> tree = {}
>>> for elt in elts:
... add_nodes(tree, elt)
...
>>> tree
{'a': {'b': {'c': {'d': {}}, 'e': {'f': {}}}, 'c': {'d': {'f': {}}}}}