Python修改键列表中的嵌套字典值

时间:2019-02-24 16:24:37

标签: python dictionary multidimensional-array nested

我有一个像这样的字典

{"value1": {}, "value2": {"value3": {}, "value4": {}, "value5": {"value6": {}}}}

以及键列表:

["value2", "value4"]

如何修改字典,以使键"value4"(在字典中具有键"value2"的)更改为"value4*"?我只希望最后一个键受影响,所以"value2"不会被更改。

我尝试使用list(map(dictionary.get, keys)),但这不能满足我的要求。

谢谢。

p.s。我已尽量保持简短,请告诉我是否切得太多。

2 个答案:

答案 0 :(得分:2)

您可以使用递归:

new_d = ["value2", "value4"]
d = {"value1": {}, "value2": {"value3": {}, "value4": {}, "value5": {"value6": {}}}}
def update(data):
  return {a if a != new_d[-1] else f'{a}*':b if not isinstance(b, dict) else update(b) for a, b in data.items()}

print(update(d))   

输出:

{'value1': {}, 'value2': {'value3': {}, 'value4*': {}, 'value5': {'value6': {}}}}

编辑:不使用f-string

def update(data):
  return {a if a != new_d[-1] else a+"*":b if not isinstance(b, dict) else update(b) for a, b in data.items()}

答案 1 :(得分:0)

其他选项,但逻辑不同。

使用第二级键,它仅在value4下直接更改value2

dct = {"value1": {}, "value2": {"value3": {}, "value4": {}, "value5": {"value4": {}}}}
keyz = ["value2", "value4"]

print(dct)

def append_star(dct, keyz):
  dct[keyz[0]][keyz[1] + '*'] = dct[keyz[0]][keyz[1]]
  del dct[keyz[0]][keyz[1]]

append_star(dct, keyz)

或者在这种情况下,直接位于value2下的value2,而不是较高级别的value2

dct = {"value1": {}, "value2": {"value2": {}, "value4": {}, "value5": {"value4": {}}}}
keyz = ["value2", "value2"]
{'value1': {}, 'value2': {'value4': {}, 'value5': {'value4': {}}, 'value2*': {}}}