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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:03:27