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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:45:04