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

如何为含空字符串根键的字典创建TypedDict类型?

如何为带空字符串根键的JSON创建TypedDict类?

问题场景

你有一段根键为空字符串""的JSON结构,想要用Python的TypedDict做类型标注,但不知道如何处理这个特殊的空键:

{
    "": {
        "0": {
            "1874900": {
                "0": "Fri, 27 May 2022 14:06:00 GMT",
                "0x": "1660211676",
                "change": "15628780",
                "v": "3"
            },
            "8680": {
                "change": "11703200",
                "v": "3"
            }
        },
        "1":{
            "594602": {
                "change": "13682071",
                "v": "3"
            },
            "2093200": {
                "3": "Fri, 29 Jul 2022 12:11:31 GMT",
                "3x": "1660219952",
                "change": "15629992",
                "v": "3"
            }
        }
    }
}

解决方案

Python的TypedDict支持直接使用字符串字面量作为键名,包括空字符串。你可以从最内层的结构开始,逐层向外定义嵌套的TypedDict类:

from typing import TypedDict, Union

# 基础条目类型:仅包含change和v字段
class BasicEntry(TypedDict):
    change: str
    v: str

# 扩展条目类型:继承基础字段,补充时间相关字段
class ExtendedEntry(BasicEntry):
    0: str
    0x: str
    2: str
    2x: str
    1: str
    1x: str
    3: str
    3x: str
    icon: str
    4x: str
    5: str
    5x: str

# 第一层子字典:键为数字字符串,值为基础或扩展条目
class Level1Dict(TypedDict, total=False):
    # 显式列出已知键,total=False允许存在未定义的额外键
    1874900: ExtendedEntry
    8680: BasicEntry
    851470: BasicEntry
    594602: BasicEntry
    594596: BasicEntry
    594600: BasicEntry
    594601: BasicEntry
    594595: BasicEntry
    2093200: ExtendedEntry

# 第二层子字典:键为"0"和"1"
class Level0Dict(TypedDict):
    0: Level1Dict
    1: Level1Dict

# 根TypedDict:直接用空字符串作为键名
class RootDict(TypedDict):
    "": Level0Dict

说明

  • 空字符串键直接在TypedDict中写成""即可,Python类型检查器(如mypy)完全支持这种写法。
  • 若JSON存在动态未知键,添加total=False参数可兼容未显式定义的键,也可以用Mapping[str, Union[BasicEntry, ExtendedEntry]]替代Level1Dict来适配任意字符串键。
  • 从内到外的嵌套定义能让类型结构更清晰,便于后续维护和类型检查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:15:37