Python中如何创建含已知键类型提示、未知键默认类型的字典?
在Python中创建带类型提示的混合字典
要实现已知键明确类型、未知键统一默认类型的字典,不同Python版本有不同的实现方式,以下是具体方案:
Python 3.11+(标准库原生支持)
从Python 3.11开始,typing.TypedDict新增了__extra_items__字段,专门用来定义未知键对应的类型。这种方式能让IDE精准识别已知键和额外键的类型。
from typing import TypedDict class SomeDict(TypedDict): a: str b: int __extra_items__: float # 指定所有未知键的值类型为float # 初始化包含已知键和额外键的字典 some_dict: SomeDict = {"a": "a", "b": 0, "c": 3.14, "d": 2.718} # IDE会正确推断各值的类型 val_a = some_dict.get("a") # 类型提示:str | None val_b = some_dict.get("b") # 类型提示:int | None val_c = some_dict.get("c") # 类型提示:float | None
Python 3.10及以下版本
如果使用旧版本Python,可以借助typing_extensions库的TypedDict,它同样支持__extra_items__字段。
首先安装依赖:
pip install typing-extensions
然后编写代码:
from typing_extensions import TypedDict class SomeDict(TypedDict): a: str b: int __extra_items__: float some_dict: SomeDict = {"a": "a", "b": 0, "c": 3.14} val_a = some_dict.get("a") # 类型提示:str | None val_b = some_dict.get("b") # 类型提示:int | None val_c = some_dict.get("c") # 类型提示:float | None
替代方案:结合Mapping与TypedDict(无版本依赖)
如果不想依赖特定Python版本或第三方库,可以用Mapping联合TypedDict来声明类型,但这种方式的类型提示精度稍低——IDE无法区分已知键和未知键的具体类型,只能给出联合类型:
from typing import Mapping, TypedDict, Union # 先定义已知键的类型 class KnownKeys(TypedDict): a: str b: int # 整体字典类型:键为str,值为已知类型或默认类型的联合 SomeDict = Mapping[str, Union[str, int, float]] some_dict: SomeDict = {"a": "a", "b": 0, "c": 3.14} # 此时get方法的返回类型为Union[str, int, float] | None val_a = some_dict.get("a") val_b = some_dict.get("b") val_c = some_dict.get("c")
内容的提问来源于stack exchange,提问作者spacether
相关产品推荐
相关产品推荐

