0

我有一个路径名列表:

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, {})
4

2 回答 2

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
于 2013-07-02T11:45:43.717 回答
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': {}}}}}
于 2013-07-02T11:53:07.310 回答