Python的TypedDict基本用法

 更新时间:2025年12月25日 14:15:18   作者:小oo呆  
TypeDict是Python3.8引入的类型提示工具,用于定义具有固定键集合和各键对应特定类型的字典对象,它允许你为字典的每个键指定值的类型,使静态类型检查器能够更准确地验证字典的使用方式,本文介绍Python的TypedDict基本用法,感兴趣的朋友跟随小编一起看看吧

        TypeDict(Python中类型安全的字典)是Python 3.8引入的类型提示工具,用于定义具有固定键集合各键对应特定类型的字典对象。它允许你为字典的每个键指定值的类型,使静态类型检查器能够更准确地验证字典的使用方式。其核心特点如下:

特点说明
字典的键是预定义的字符串必须提前定义好所有键的名称和类型
每个键都有对应的值类型每个键的值都有明确的类型约束
支持必需字段和可选字段可以定义哪些字段必须提供,哪些可选
运行时不强制类型检查Python运行时不验证类型,但mypy等工具可以静态检查

一、基本用法

1、定义TypedDict

  • Python 3.8+ 直接使用 from typing import TypedDict
from typing import TypedDict
class User(TypedDict):
    name: str
    age: int
    is_active: bool
# 创建符合TypedDict定义的字典(在注解中声明)
user: User = {
    "name": "张三",
    "age": 30,
    "is_active": True
}

2、在函数中使用

def get_user_info(user: User) -> str:
    return f"用户名:{user['name']},年龄:{user['age']}"
print(get_user_info(user))  # 输出:用户名:张三,年龄:30

3、可选字段处理

(1)使用tool=False

class PartialUser(TypedDict, total=False):
    name: str
    age: int
    email: str
# 所有字段都是可选的
partial_user: PartialUser = {
    "name": "李四"
    # age和email可以不提供
}

(2)使用NotRequired

from typing_extensions import NotRequired
class UserProfile(TypedDict):
    name: str                    # 必需字段
    age: int                     # 必需字段
    email: NotRequired[str]      # 可选字段
    phone: NotRequired[str]      # 可选字段
# 可以不包含可选字段
profile1: UserProfile = {
    "name": "王五",
    "age": 25
}
# 也可以包含可选字段
profile2: UserProfile = {
    "name": "赵六",
    "age": 28,
    "email": "zhaoliu@example.com"
}

4、注意事项

(1)不强制校验

# 下面这段代码在运行时不会报错
# 但mypy等静态检查器会发出警告
user: User = {
    "name": "错误",  # 这是str,没问题
    "age": "三十",    # 应该是int,类型错误!
    "is_active": True
}

(2)不能在其中定义方法

# TypedDict只能定义键的类型,不能定义方法
class BadExample(TypedDict):
    name: str
    def greet(self) -> str:  # 错误!不允许方法
        return "Hello"

二、常见应用场景

1、校验API的响应格式

class APIResponse(TypedDict):
    success: bool
    data: NotRequired[list[dict]]
    error: NotRequired[str]
def process_response(response: APIResponse) -> None:
    if response["success"]:
        if "data" in response:
            print(f"处理数据:{response['data']}")
    else:
        if "error" in response:
            print(f"错误信息:{response['error']}")
# 使用示例
success_resp: APIResponse = {
    "success": True,
    "data": [{"id": 1, "name": "商品1"}]
}
error_resp: APIResponse = {
    "success": False,
    "error": "认证失败"
}

2、函数结构化返回值

class AnalysisResult(TypedDict):
    status: str
    score: float
    details: dict
def analyze_text(text: str) -> AnalysisResult:
    # 模拟分析逻辑
    return {
        "status": "completed",
        "score": 0.85,
        "details": {"length": len(text), "words": len(text.split())}
    }
result = analyze_text("这是一段测试文本")
# result的类型被明确为AnalysisResult,IDE可以提供智能提示

到此这篇关于Python的TypedDict基本用法的文章就介绍到这了,更多相关Python的TypedDict内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python tkinter如何设置背景颜色

    Python tkinter如何设置背景颜色

    本文主要介绍了Python的tkinter库中设置组件背景颜色的方法,主要通过使用bg选项和config方法来实现,包括设置单个组件、窗口、按钮、文本框以及整个应用的背景颜色,同时也可以使用十六进制颜色代码进行更精确的颜色控制
    2024-09-09
  • pandas中merge函数的用法

    pandas中merge函数的用法

    merge()函数是Pandas中用于合并两个DataFrame的函数,本文主要介绍了pandas中merge函数的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • Python集合pop()函数使用方法详解

    Python集合pop()函数使用方法详解

    这篇文章主要介绍了Python 集合 pop()函数的使用方法,文中有详细的代码实例,讲解的非常清楚,具有一定的参考价值,需要的朋友可以参考下
    2023-07-07
  • Python生态圈图像格式转换问题(推荐)

    Python生态圈图像格式转换问题(推荐)

    在Python生态圈里,最常用的图像库是PIL——尽管已经被后来的pillow取代,但因为pillow的API几乎完全继承了PIL,所以大家还是约定俗成地称其为PIL。这篇文章主要介绍了Python生态圈图像格式转换问题,需要的朋友可以参考下
    2019-12-12
  • 查看jupyter notebook每个单元格运行时间实例

    查看jupyter notebook每个单元格运行时间实例

    这篇文章主要介绍了查看jupyter notebook每个单元格运行时间实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python优秀开源项目Rich源码解析的流程分析

    Python优秀开源项目Rich源码解析的流程分析

    这篇文章主要介绍了Python优秀开源项目Rich源码解析,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • django 实现电子支付功能的示例代码

    django 实现电子支付功能的示例代码

    这篇文章主要介绍了django 实现电子支付功能的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Django 中使用日志的方法

    Django 中使用日志的方法

    Django 使用 Python 内置的 logging 模块处理系统日志,所以,只要掌握了 Python 中的 logging 模块,基本也就能够在 django 中使用日志了,本文重点给大家介绍django 中使用日志的方法,感兴趣的朋友一起看看吧
    2022-07-07
  • Pycharm挂代理后依旧插件下载慢的完美解决方法

    Pycharm挂代理后依旧插件下载慢的完美解决方法

    狠多朋友在使用Pycharm插件时,反应下载速度很慢,挂载了代理还是不够,怎么解决这一问题呢,下面小编给大家代理了Pycharm插件下载慢的完美解决方法,需要的朋友参考下吧
    2021-08-08
  • 探索Python int()函数传入中文或者字符串会发生什么

    探索Python int()函数传入中文或者字符串会发生什么

    这篇文章主要为大家介绍了Python int()函数传入中文或者字符串会发生什么,详细讨论int()函数的常规使用以及它如何处理异常输入,特别是涉及字符串和中文字符的情况
    2024-01-01

最新评论