Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python修改键列表中的嵌套字典值_Python_Dictionary_Multidimensional Array_Nested - Fatal编程技术网

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

Python修改键列表中的嵌套字典值,python,dictionary,multidimensional-array,nested,Python,Dictionary,Multidimensional Array,Nested,我有一本字典,像: {“value1”:{},“value2”:{“value3”:{},“value4”:{},“value5”:{“value6”:{}} 和一个密钥列表: [“value2”、“value4”] 如何修改字典,使键“value4”(在具有键“value2”的字典中)更改为“value4*”?我只希望最后一个键受到影响,因此不会更改“value2” 我尝试过使用列表(map(dictionary.get,keys)),但这并不能满足我的需要 提前谢谢 p、 我尽量简短,请告诉

我有一本字典,像:

{“value1”:{},“value2”:{“value3”:{},“value4”:{},“value5”:{“value6”:{}}

和一个密钥列表:

[“value2”、“value4”]

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

我尝试过使用
列表(map(dictionary.get,keys))
,但这并不能满足我的需要

提前谢谢

p、 我尽量简短,请告诉我是否剪得太多。

您可以使用递归:

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

是的,你切得太多了。“value4*”是什么意思?@RafaelBarros好的,我会尝试编辑它,让它更清晰。谢谢您是想更改
value2
value4
还是只更改
value4
?这是您应该清楚说明的事情,因为列表表明您想更改此列表中的所有键,我想@Ajax1234也假定了这些键。@Cleb我将编辑此帖子。谢谢。。。它在
return
之后的第一个单引号处给出了无效语法。顺便说一句,我使用的是py3。你知道是什么原因吗?@Jachdich这是因为第一个解决方案是使用
f-string
格式化新的键,这只在Python3.7中可用。请看我最近的编辑。谢谢,现在可以了。只有一件事,是否可以只更新最后一个键?所以只有
value4
发生了变化,而不是
value2
?@Jachdich很乐意帮忙!