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

Python Enum类是否内置大小写不敏感字符串匹配的惯用实现?

大小写不敏感的Enum匹配实现方案

Python标准库的Enum类没有直接内置大小写不敏感的匹配方法,但可以通过以下两种惯用方式实现,无需重复编写样板代码,同时保留枚举值原有格式:

1. 自定义枚举基类(通用复用)

创建一个支持大小写匹配的基类,所有需要该功能的枚举都继承它:

from enum import Enum

class CaseInsensitiveEnum(Enum):
    @classmethod
    def match(cls, s: str) -> Enum | None:
        s_lower = s.lower()
        for member in cls:
            if member.value.lower() == s_lower:
                return member
        return None

# 示例使用
class Fruit(CaseInsensitiveEnum):
    APPLE = "Apple"
    ORANGE = "Orange"
    BANANA = "Banana"

# 调用测试
print(Fruit.match("apple"))   # 输出: Fruit.APPLE
print(Fruit.match("ORANGE"))  # 输出: Fruit.ORANGE
print(Fruit.match("grape"))   # 输出: None

2. 预构建小写映射(高效查找)

利用Enum内置的_value2member_map_属性,提前生成小写值到枚举成员的映射,适合成员较多的场景:

from enum import Enum

class Fruit(Enum):
    APPLE = "Apple"
    ORANGE = "Orange"
    BANANA = "Banana"

    # 初始化时构建小写映射
    _lower_value_map = {v.lower(): member for v, member in _value2member_map_.items()}

    @classmethod
    def match(cls, s: str) -> Fruit | None:
        return cls._lower_value_map.get(s.lower())

# 调用测试
print(Fruit.match("apple"))   # 输出: Fruit.APPLE

两种方案都不会修改原有枚举值的格式,完全满足你在其他场景使用CamelCase展示的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 08:52:23