如何编写Pythonic的add_nested函数实现字典嵌套项添加?
实现符合Python风格的
add_nested函数 可以通过遍历键路径的方式实现这个需求,下面是简洁直观的函数实现:
def add_nested(d, keys, value): current = d # 遍历路径中除最后一个键外的所有层级 for key in keys[:-1]: # 确保当前层级的键对应字典,不存在则创建 if key not in current or not isinstance(current[key], dict): current[key] = {} current = current[key] # 为最后一个键赋值 current[keys[-1]] = value return d
函数工作逻辑
- 用
current变量追踪当前操作的字典层级,初始指向传入的原字典。 - 遍历键路径的前n-1个键:
- 若当前层级没有该键,或该键对应的值不是字典,则创建新字典并赋值给该键。
- 将
current切换到该键对应的字典,进入下一层级。
- 最后把目标值赋给键路径的最后一个键,完成嵌套项的添加。
测试示例
# 初始字典 myDict = { "a1": { "a2": "Hello" } } # 添加嵌套项 myDict = add_nested(myDict, ["b1", "b2", "b3"], "z2") myDict = add_nested(myDict, ["c1"], "z3") # 打印结果 print(myDict)
执行后输出:
{ 'a1': {'a2': 'Hello'}, 'b1': {'b2': {'b3': 'z2'}}, 'c1': 'z3' }
注意事项
- 若键路径中某个已存在的键对应的值不是字典(比如是字符串),函数会将其覆盖为新字典,再继续后续层级的创建。
- 字典是可变对象,函数内部直接修改原字典,返回原字典是为了支持示例中的赋值写法,也可以选择不返回(调用时无需赋值)。
内容的提问来源于stack exchange,提问作者bkbilly
相关产品推荐
相关产品推荐

