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
相关产品推荐
相关产品推荐

