更多pythonic方式来改变多级字典值

例如,我有以下字典:

{'foo': 'test', 
 'bar': {'test1': 'some text here'},
 'baz': {'test2': {'test3': 'some text here', 'test4': 'some text here'}}}

或类似的东西,也许更多的水平.

现在问题是,我想改变……“这里的一些文字”改为“测试”.是的,我可以使用很多for循环,如下面的代码:

d = {'foo': 'test',
     'bar': {'test1': 'some text here'},
     'baz': {'test2': {'test3': 'some text here',
                       'test4': 'some text here'}}}

for i in d:
    if d[i] == 'some text here':
        d[i] = 'A test'

    elif type(d[i]) == dict:
        for j in d[i]:
            if d[i][j] == 'some text here':
                d[i][j] = 'A test'

            elif type(d[i][j]) == dict:
                for n in d[i][j]:
                    if d[i][j][n] == 'some text here':
                        d[i][j][n] = 'A test'

__import__('pprint').pprint(d)

输出:

{'bar': {'test1': 'A test'},                                                    
 'baz': {'test2': {'test3': 'A test', 'test4': 'A test'}},
 'foo': 'test'}

但是我认为这不是一个好方法……任何想法?

解决方法:

只要你改变的价值不是太多毛,这里就是一个单行:

In [29]: data = dict(foo=12, bar=dict(dd=12), ex=dict(a=dict(b=dict(v=12))))

In [30]: json.loads(re.sub("12", "33", json.dumps(data)))
Out[30]: {'bar': {'dd': 33}, 'ex': {'a': {'b': {'v': 33}}}, 'foo': 33}

编辑,每凯文,简单替换甚至不需要重新:

json.loads(json.dumps(data).replace("12", "33"))
上一篇:python – 检测上下文管理器嵌套


下一篇:Python如何将嵌套的循环放入函数中?