Python中根据OAS变量取值条件构造字典的优雅实现方案
Pythonic简化方案
原代码的核心问题是重复定义了相同的greeksName字段,违反DRY(不重复代码)原则,你可以选择以下几种优化方案:
方案1:基础字典+条件修改(最易读,推荐大多数场景)
先预设固定字段和默认值,仅修改差异化内容:
# 预设固定字段与默认值 oas = { 'greeksName': 'OAS', 'status': '', 'exception': '', 'value': None } if OAS == 'N/A': oas.update({ 'status': 'Not Applicable', 'exception': 'Not Applicable' }) elif is_a_valid_value(OAS): oas.update({ 'status': 'success', 'value': OAS }) else: oas.update({ 'status': 'fail', 'exception': OAS })
方案2:三元表达式内联(最紧凑,适合逻辑固定不变的场景)
直接在字典定义内完成所有条件判断,无额外分支代码:
oas = { 'greeksName': 'OAS', 'status': 'Not Applicable' if OAS == 'N/A' else 'success' if is_a_valid_value(OAS) else 'fail', 'exception': 'Not Applicable' if OAS == 'N/A' else '' if is_a_valid_value(OAS) else OAS, 'value': OAS if is_a_valid_value(OAS) else None }
方案3:规则函数+字典合并(易扩展,适合后续规则会迭代的场景)
把差异化规则抽成独立函数,和公共字段拆分维护:
def get_oas_attrs(OAS): if OAS == 'N/A': return {'status': 'Not Applicable', 'exception': 'Not Applicable', 'value': None} elif is_a_valid_value(OAS): return {'status': 'success', 'exception': '', 'value': OAS} else: return {'status': 'fail', 'exception': OAS, 'value': None} # 合并公共字段与规则返回值,Python 3.9+支持|运算符,低版本可替换为 {**{'greeksName': 'OAS'}, **get_oas_attrs(OAS)} oas = {'greeksName': 'OAS'} | get_oas_attrs(OAS)
注意:你贴出的原始代码中每个字典的
exception键值对末尾缺少逗号,运行会触发语法错误,优化时记得补上。
内容的提问来源于stack exchange,提问作者Devesh Agrawal
相关产品推荐
相关产品推荐

