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很乐意帮忙!