如何遵循DRY原则优化多层Python字典的指定键值累加逻辑
优化嵌套字典取值累加的方案
核心思路
通过编写通用的嵌套字典值获取函数,配合清晰定义的键路径列表,消除重复的条件判断逻辑,完全符合DRY原则。
实现代码
首先定义安全获取嵌套值的辅助函数:
def get_nested_value(data, keys): current = data for key in keys: # 中途遇到非字典或不存在的键,直接返回None if not isinstance(current, dict) or key not in current: return None current = current[key] # 对应原代码的判断逻辑:空值不参与累加 return current if current else None
然后定义目标字典和键路径列表,完成累加操作:
info = { "one": 1, "two": { "three": 3, "almost_three": 3.5 }, "four": { "five": { "six": 6 } } } # 每个元素是多层键组成的列表,清晰标注取值路径 NUMS = [ ['one'], ['two', 'three'], ['two', 'almost_three'], ['four', 'five'] ] # 初始化累加值并遍历处理 total = 0 for key_path in NUMS: value = get_nested_value(info, key_path) if value: total += value # 也可用生成器表达式简化累加(效果完全一致) # total = sum(val for val in (get_nested_value(info, p) for p in NUMS) if val) print(total) # 按原代码逻辑输出:7.5 + {'six':6}
方案优势
- 消除重复冗余:所有取值逻辑统一封装在辅助函数中,避免大量重复的
if判断和get调用。 - 维护成本低:键路径列表
NUMS直观易读,新增或修改取值路径只需调整列表,无需改动核心逻辑。 - 安全防错:辅助函数自动处理中途不存在的键或非字典类型,避免抛出
KeyError异常。
内容的提问来源于stack exchange,提问作者elad silver
相关产品推荐
相关产品推荐

