Python中如何声明键为str、值为多指定类型的固定结构字典类型注解
固定结构字典的类型声明方案
你需要的严格键值匹配、无Union的字典类型标注,直接用标准库的TypedDict实现即可。普通的Dict类型仅支持统一标注所有键、所有值的类型,不支持单键单独指定值类型,这也是你写的多参数Dict写法不符合语法规范的原因。
具体实现方式
- 导入依赖
Python 3.8及以上版本可以直接从标准库typing导入,低于3.8版本需要安装typing_extensions兼容包后导入:
# Python 3.8+ 用这个导入语句 from typing import TypedDict, List # Python 3.7及以下用这个导入语句 # from typing_extensions import TypedDict, List
- 定义固定字典结构
按照你实际的键名、对应值类型声明TypedDict子类即可,类型检查器会严格校验结构,不允许缺键、多键、值类型不匹配:
# 以下三个类型替换成你实际的业务类型即可 class ObjectType1: pass class ObjectType2: pass class ObjectType3: pass class FixedStructDict(TypedDict): # 把下面三个键名替换成你实际使用的字符串键名 first_key: ObjectType1 second_key: ObjectType2 third_key: List[ObjectType3]
- 给生成方法加类型标注
直接把你实现的字典生成方法的返回类型标注为上面定义的FixedStructDict即可,示例:
def generate_my_dict() -> FixedStructDict: return { "first_key": ObjectType1(), "second_key": ObjectType2(), "third_key": [ObjectType3(), ObjectType3()] }
校验效果
使用mypy、pyright等类型检查工具校验时,会严格执行以下规则,完全满足你的要求:
- 返回的字典必须包含定义的全部三个键,不能缺失也不能额外增加未定义的键
- 每个键对应的值必须严格匹配声明的类型,不会用Union放宽类型约束
- 所有键均为字符串类型,符合你的基础要求
内容的提问来源于stack exchange,提问作者KZiovas
相关产品推荐
相关产品推荐

