将嵌套字典转换为列表列表

时间:2018-05-22 14:58:43

标签: python list dictionary

我有一个嵌套字典,如下所示:

{
  "g": {
    "o": {}
  },
  "h": {
    "p": {}
  },
  "e": {
    "v": {},
    "m": {
      "s": {}
    }
  },
  "f": {
    "n": {}
  },
  "a": {
    "i": {}
  },
  "d": {
    "u": {},
    "l": {
      "r": {}
    }
  },
  "b": {
    "j": {}
  },
  "c": {
    "t": {},
    "k": {
      "q": {
        "z": {}
      }
    }
  }
}

是否有快速方法将其转换为列表列表以获得以下输出:

 [g, o]
 [h, p]
 [e, v]
 [e, m, s]
 [f, n]
 [a, i]
 [d, u]
 [d, l, r]
 [b, j]
 [c, t]
 [c, k, q, z]

当我们遇到一个空字典时,我们停止。例如,我们从" g"开始,它有孩子" o"而这个名单又没有孩子,因此列表包括" g"和" o"。

另一个例子:从" e"开始,孩子们是" v"和" m"和" m"已经" s"。因此,我们有两个列表:一个用" e"和" v"和另一个" e"," v"和" m"。

我尝试创建一个递归函数,但遗憾的是,它并没有很好。

1 个答案:

答案 0 :(得分:2)

这应该非常快,使用带生成器的递归函数:

def paths(tree, cur=()):
    if not tree:
        yield cur
    else:
        for n, s in tree.items():
            for path in paths(s, cur+(n,)):
                yield list(path)

使用:

list(paths(your_dict))