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

Python如何通过枚举值替换列表中对应的枚举名称元素

枚举名称替换为枚举值实现方案

问题场景

现有如下定义的字符串枚举类:

from enum import Enum

class MyEnum(str, Enum):
    A = 'atk'
    C = 'ccc'
    B = 'break'

待处理的原始列表如下(注意不要用list做变量名,会覆盖Python内置的列表类型):

raw_list = ['A', 123, 'B', 44, 2, 'C']

需求是将列表中匹配枚举成员名的字符串替换为对应的枚举取值,最终输出结果:

['atk', 123, 'break', 44, 2, 'ccc']

实现代码

直接遍历列表,对每个元素判断是否为枚举成员名,匹配则替换为对应值,非匹配元素保留原值即可:

result_list = []
for item in raw_list:
    # 判断元素是否为字符串,且属于枚举成员名称
    if isinstance(item, str) and item in MyEnum.__members__:
        # 通过成员名取枚举实例,再取对应的value值
        result_list.append(MyEnum[item].value)
    else:
        result_list.append(item)

如果偏好列表推导式的简洁写法,也可以写成如下形式:

result_list = [MyEnum[item].value if isinstance(item, str) and item in MyEnum.__members__ else item for item in raw_list]

逻辑说明

  • MyEnum.__members__是枚举类自带的内置属性,以字典形式存储了所有枚举成员的名称和实例映射,用来判断字符串是否为合法枚举名效率很高
  • 由于定义的MyEnum继承了str类型,最终拿到的枚举值本身就是字符串类型,可以直接和列表里的其他元素混用
  • 非字符串类型、不在枚举成员名列表里的元素会被原样保留,不会改动原有数据

运行上述代码后打印result_list,即可得到预期的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:09:47