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

