繁体   English   中英

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

[英]Python modify nested dictionary value at list of keys

我有一本字典,如:

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

和一个键列表:

["value2", "value4"]

如何修改字典,使键"value4" (在字典中的键为"value2" )更改为"value4*" 我只希望最后一个键受到影响,因此不会更改"value2"

我试过使用list(map(dictionary.get, keys))但这不符合我的要求。

提前致谢。

ps我尽量保持简短,请告诉我是否剪掉了太多。

您可以使用递归:

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

其他选项,但不同的逻辑。

适用于二级键,它仅在value2下直接更改value4

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*': {}}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM