如何在Python中嵌套dict中动态移动

时间:2014-04-13 23:37:33

标签: python dictionary nested

我有一个带有动态数量的嵌套dicts的词典,类似于:

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

我需要在这个词典中动态移动,例如我想做以下事情:

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

里面的物品数量"等级"可能会有所不同。

我可以在" level"内的有限数量的项目中部分地获得相同的结果。写下这样的东西:

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 个答案:

答案 0 :(得分:3)

这里没有很多代码可以继续,但是根据你给出的,你可以定义

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)