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

如何在Python中从常量字典获取字符串字面量联合类型的键?

在Python中从常量字典自动推断键的字面量联合类型

方案1:用Final标记字典+自动推导字面量类型

把字典标记为Final后,类型检查器会将其视为不可变常量,再通过tuple()转换键集合来生成Literal联合类型:

from typing import Final, Literal

# 只读常量字典
CONST_DICT: Final = {
    'a': 1,
    'b': 2,
    'c': 3
}

# 自动生成键的字面量联合类型
KeyType = Literal[tuple(CONST_DICT.keys())]

Python 3.10+及主流类型检查器(如pyright、mypy)能正确识别这个推导,无需手动枚举每个键。

方案2:借助枚举间接实现约束

如果字典键固定,先定义枚举再生成字典,既能保证键的一致性,又能获得强类型约束:

from enum import Enum
from typing import Final, Dict

class DictKeys(Enum):
    A = 'a'
    B = 'b'
    C = 'c'

CONST_DICT: Final[Dict[DictKeys, int]] = {
    DictKeys.A: 1,
    DictKeys.B: 2,
    DictKeys.C: 3
}

# 使用时直接用枚举成员,类型检查会自动限制输入
def get_value(key: DictKeys):
    return CONST_DICT[key]

方案3:利用TypeAlias简化类型定义

结合TypeAlias可以让类型推导更清晰,同样依赖Final标记的常量字典:

from typing import Final, TypeAlias
from typing_extensions import Literal

CONST_DICT: Final = {
    'x': 'foo',
    'y': 'bar',
    'z': 'baz'
}

KeyType: TypeAlias = Literal[tuple(CONST_DICT.keys())]

注意:不同类型检查器对推导的支持有细微差别,pyright对这类自动推导的兼容性最好,mypy可能需要开启部分严格模式才能完全识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:00:04