Python字典替换嵌套值

jecbmhm3  于 2023-01-27  发布在  Python
关注(0)|答案(1)|浏览(209)

我想对嵌套在Python字典中的键值进行特定的更改。
例如

my_dict = {"header": {"from": "/app/510112-0b0bf05b07dc5bb03fa414642e849a11/subscribe",
                                  "messageId": "ef6b8e50620ac768569f1f7abc6507a5", "method": "GET",
                                  "namespace": "Appliance.System.All", "payloadVersion": 1,
                                  "sign": "e48c24e510044d7e2d248c68ff2c10ca", "timestamp": 1601908439,
                                  "triggerSrc": "Android"}, "payload": {}}

并且我想改变"消息ID"和"时间戳"的值。
我发现了这篇文章:-Python dictionary replace values,它几乎包含了所需的所有解决方案。
我的场景是,我希望在不使用for循环方法查找键的情况下更改嵌套值。
考虑到这一点,我尝试了更新和合并选项。

my_dict.update({'key1': 'value1', 'key2': 'value2'})
my_dict.update(key1='value1', key2='value2')
my_dict = my_dict | {'key1': 'value1', 'key2': 'value2'}
my_dict |= {'key1': 'value1', 'key2': 'value2'}

我尝试了以下方法:

my_dict |= {'header':{'messageId':9}}
my_dict = json_dict | {'header':{'messageId':9}}
my_dict.update({'header':{'messageId':9}})
my_dict.update({"header":{"messageId":'a'}})

不幸的是,虽然这些在使用非嵌套字典时都能正常工作,但当我在嵌套字典上尝试这些时,字典的该部分中的所有其他键和值都被删除了,除了我追加/更新的键和值或嵌套之外的键和值。

>>> my_dict
{'header': {'messageId': 'a'}, 'payload': {}}

这是更新嵌套字典的问题,还是我在如何使用嵌套字典的这些调用的假设中犯了一个错误?
谢谢。

wlzqhblo

wlzqhblo1#

如果要更改嵌套在另一个字典中的字典中的键的值,可以引用嵌套字典的键来更改值,如下所示:

my_dict["header"]["messageId"] = "updated messageId"
my_dict["header"]["timestamp"] = "updated timestamp"

print(my_dict)

它保持条目的其余部分不变,只更改引用的键。

相关问题