如何拆分字符串并形成多级嵌套字典?

Mik*_*ike 9 python string dictionary

我有一个字符串

foo/bar/baz
Run Code Online (Sandbox Code Playgroud)

我也有val=1例如.是否有一种干净的方法将foo/bar/bazdict中的最后一项分割成多维dict,等于1.所以它看起来像

{'foo': {'bar': {'baz': 1}}}
Run Code Online (Sandbox Code Playgroud)

the*_*eye 10

你可以像这样使用reducereversed运行

>>> reduce(lambda res, cur: {cur: res}, reversed("foo/bar/baz".split("/")), 1)
{'foo': {'bar': {'baz': 1}}}
Run Code Online (Sandbox Code Playgroud)

如果您在使用Python 3.x中,那么你需要导入reducefunctools

>>> from functools import reduce
>>> reduce(lambda res, cur: {cur: res}, reversed("foo/bar/baz".split("/")), 1)
{'foo': {'bar': {'baz': 1}}}
Run Code Online (Sandbox Code Playgroud)

这里,最后一个参数reduce是起始值.它将从迭代传递中逐个获取值,使用结果和当前值调用函数,然后在下一次开始时,最后一个结果将是第一个参数,当前值将作为第二个参数.当iterable耗尽时,它将返回结果.

因此,执行将逐步进行,如下所示

假设func是lambda函数,它会像这样重复调用

func(1, "baz")                   => {"baz": 1}
func({"baz": 1}, "bar")          => {"bar": {"baz": 1}}
func({"bar": {"baz": 1}}, "foo") => {"foo": {"bar": {"baz": 1}}}
Run Code Online (Sandbox Code Playgroud)