You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python2遗留代码优化:字典推导式避免重复调用dict.get()的方法问询

优化方案

当然可以这么做,这是非常合理的优化思路——既减少重复的字典查询操作,也让代码更简洁易读。

优化后的代码

# dict1 and dict2 are inputs. dict2 is where the value is a 4-tuple
return {
    key: [
        NamedTuple1(val1, val2, val3, val4),
        NamedTuple2(*d2_vals),
    ]
    for key, (val1, val2, val3, val4) in dict1.items()
    for d2_vals in [dict2.get(key, (None, None, None, None))]
}

如果想让默认元组的写法更简洁,还可以换成:

return {
    key: [
        NamedTuple1(val1, val2, val3, val4),
        NamedTuple2(*d2_vals),
    ]
    for key, (val1, val2, val3, val4) in dict1.items()
    for d2_vals in [dict2.get(key, (None,) * 4)]
}

优化思路说明

  • 把dict2.get的调用移到推导式的for子句中,通过for d2_vals in [xxx]的技巧将查询结果绑定到变量,整个迭代周期只执行一次字典查询,避免重复计算。
  • 用*d2_vals直接解包元组传入NamedTuple2,省去了逐个索引取值的冗余代码,逻辑更清晰。
  • (None,) * 4和(None, None, None, None)功能完全一致,但写法更紧凑,后续如果需要调整元组长度也更方便修改。

这个写法完全兼容Python2.7(字典推导式和元组解包在Python2.7中均支持),适配你的遗留代码场景。

内容的提问来源于stack exchange,提问作者roulette01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 20:32:37