python字典中的“记住”父键

时间:2018-07-28 13:51:55

标签: python json dictionary

说我有一个这种结构的字典:

x = {
  "a": {
      "b": {
         "c": 1
      }
  }
}

我创建了一个接受some_func(structure={"a.b.c":2})之类的函数

我需要此函数来遍历x并将c的值更改为2。 字典的深度是该函数未知的。因此,它必须依赖传递给它的结构。

我该怎么做?

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}}}