如何通过键链列表修改Python嵌套字典的深层值?
动态修改嵌套字典/列表的值
假设你已经把键链整理成了列表,比如对应a["key0"][0]["key01"]的键链是["key0", 0, "key01"],可以通过以下方法实现修改:
实现思路
遍历键链的前n-1个元素,定位到要修改的目标所在的父对象(可能是字典或列表),最后用键链的最后一个元素直接修改父对象对应位置的值。因为字典和列表都是可变对象,操作会直接作用于原数据。
代码实现
def update_nested(data, key_chain, new_value): # 定位到目标的父级对象 parent = data for key in key_chain[:-1]: parent = parent[key] # 修改目标值 parent[key_chain[-1]] = new_value # 测试示例 a = {"key0" : [{"key01":1}], "key1" : 2} # 键链列表 keys = ["key0", 0, "key01"] # 修改值为2 update_nested(a, keys, 2) print(a) # 输出: {'key0': [{'key01': 2}], 'key1': 2}
补充说明
- 如果键链中的某个元素不存在(比如写错了键名或索引),会抛出
KeyError(字典)或IndexError(列表),如果需要容错,可以在遍历过程中添加异常捕获逻辑。 - 这个方法同时支持字典和列表混合嵌套的结构,只要键链中的元素对应正确的类型(字典用键名,列表用索引)。
内容的提问来源于stack exchange,提问作者Alexandros
相关产品推荐
相关产品推荐

