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

3 投票
1 回答
2868 浏览
提问于 2025-04-18 02:37

我有一个字典(dict),里面有动态数量的嵌套字典,结构大概是这样的:

my_dict = {"a": {"b": {"c: {...}}}}

我需要在这个字典里动态地移动,比如我想这样做:

levels = ["a", "b", "c"]
my_dict[levels[0]][levels[1]][levels[2]] = "something"

这里面“levels”的数量可能会变化。

我可以通过写一些代码来部分实现这个目标,适用于“levels”里面有限数量的项目,像这样:

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"
(...)

但是我想找一个更通用、更优雅的解决方案。

有没有办法做到这一点呢?

1 个回答

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

然后可以像这样使用它

my_dict = {"a":{"b":{"c":{}}}}
set(my_dict, ["a", "b", "c"], "something")
print get(my_dict, ["a", "b", "c"])

这是一个可以替代 get 的功能性写法:

def get(d, keys):
    return reduce(lambda d, key: d[key], keys, d)

撰写回答