说我有一个这种结构的字典:
x = {
"a": {
"b": {
"c": 1
}
}
}
我创建了一个接受some_func(structure={"a.b.c":2})
之类的函数
我需要此函数来遍历x并将c的值更改为2。 字典的深度是该函数未知的。因此,它必须依赖传递给它的结构。
我该怎么做?
答案 0 :(得分:0)
您可以使用递归算法或functools.reduce
循环嵌套的字典结构。以下是后者的示例。为了说明起见,我们通过字典分配多个值。
x = {"a": {"b": {"c": 1, "d": 3}}}
from operator import getitem
from functools import reduce
def set_single_val(dataDict, mapKeys, value):
mapList = mapKeys.split('.')
reduce(getitem, mapList[:-1], dataDict)[mapList[-1]] = value
def set_vals(x, structure={}):
for k, v in structure.items():
set_single_val(x, k, v)
set_vals(x, structure={"a.b.c":2, "a.b.d":4})
print(x)
{'a': {'b': {'c': 2, 'd': 4}}}
答案 1 :(得分:-1)
我制作了一个图书馆,该图书馆可以满足您的要求,还有Prodict。
from prodict import Prodict
x = {
"a": {
"b": {
"c": 1
}
}
}
p = Prodict.from_dict(x)
p.a.b.c = 2
print(p)
# {'a': {'b': {'c': 2}}}