我有一个dict,其中包含动态数量的嵌套dict,例如:
my_dict = {"a": {"b": {"c: {...}}}}
我需要在此字典中动态移动,例如,我想执行以下操作:
levels = ["a", "b", "c"]
my_dict[levels[0]][levels[1]][levels[2]] = "something"
“级别”中项目的数量可能会有所不同.
通过编写类似以下内容,我可以在“关卡”中的有限数量的项目上部分达到相同的结果:
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"
(...)
但我正在寻找更通用,更优雅的解决方案.
有没有办法做到这一点?
解决方法:
这里没有很多代码可以进行,但是对于给出的内容,您可以定义
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)