如何在 Python 中动态移动嵌套字典

Fab*_*ato 3 python dictionary nested

我有一个字典,里面有动态数量的嵌套字典,如下所示:

my_dict = {"a": {"b": {"c: {...}}}}
Run Code Online (Sandbox Code Playgroud)

我需要在这个字典中动态移动,例如我想执行以下操作:

levels = ["a", "b", "c"]
my_dict[levels[0]][levels[1]][levels[2]] = "something"
Run Code Online (Sandbox Code Playgroud)

其中“级别”内的项目数量可能会有所不同。

通过编写如下内容,我可以为“级别”内的有限数量的项目部分实现相同的结果:

if len(levels) == 1:
    my_dict[levels[0]] = "something"
elif len(levels) == 2:
    my_dict[levels[0]][levels[1]] = "something"
elif len(levels) == 3:
    my_dict[levels[0]][levels[1]][levels[2]] = "something"
(...)
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一个更通用和优雅的解决方案。

有没有办法做到这一点?

Pau*_*per 6

这里没有太多代码可以继续,但是对于您给出的内容,您可以定义

def get(d, keys):
    for key in keys:
        d = d[key]
    return d

def set(d, keys, value):
    d = get(d, keys[:-1])
    d[keys[-1]] = value
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它

my_dict = {"a":{"b":{"c":{}}}}
set(my_dict, ["a", "b", "c"], "something")
print get(my_dict, ["a", "b", "c"])
Run Code Online (Sandbox Code Playgroud)

功能替代get

def get(d, keys):
    return reduce(lambda d, key: d[key], keys, d)
Run Code Online (Sandbox Code Playgroud)