假设我有这个结构的字典:
x = {
"a": {
"b": {
"c": 1
}
}
}
我创建了一个函数,它接受像some_func(structure={"a.b.c":2})
这样的结构
我需要这个函数来遍历x并将c的值改成2。字典的深度对于这个函数来说是未知的。所以它必须依赖于传递给它的结构。
我该怎么做呢?
发布于 2018-07-28 22:03:07
您可以使用递归算法或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}}}
发布于 2018-07-28 22:00:14
我已经做了一个库,它可以满足你的要求,更多的,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}}}
https://stackoverflow.com/questions/51572024
复制相似问题