我有一个像这样的字典
{"value1": {}, "value2": {"value3": {}, "value4": {}, "value5": {"value6": {}}}}
以及键列表:
["value2", "value4"]
如何修改字典,以使键"value4"
(在字典中具有键"value2"
的)更改为"value4*"
?我只希望最后一个键受影响,所以"value2"
不会被更改。
我尝试使用list(map(dictionary.get, keys))
,但这不能满足我的要求。
谢谢。
p.s。我已尽量保持简短,请告诉我是否切得太多。
答案 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*': {}}}