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
>>> 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中,那么你需要导入reduce从functools
>>> 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)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           973 次  |  
        
|   最近记录:  |