首页 > 编程问答 >如何在 python 中为具有不同类型作为值的字典添加类型声明

如何在 python 中为具有不同类型作为值的字典添加类型声明

时间:2024-07-30 14:49:29浏览次数:7  
标签:python python-typing

我有一个字典如下

my_dict = {
   "key_1": "value_1",
   "key_2": {
       "key_1": True,
           "key_2": 1200
       }
   "key_3": True,
}

并且在我的类中

@dataclass
class TestClass:
    my_dict: typing.Dict[{str, str}, {str, typing.Dict[{str, bool}, {str, int}]}]

上面的声明是不正确的。

如果我想为 my_dict 添加类型它应该是什么以及如何编写结构,因为我有不同的类型价值观?


from typing import Dict, Union

@dataclass
class TestClass:
    my_dict: Dict[str, Union[str, Dict[str, Union[bool, int]]]]

解释:

  1. Dict[str, ...] : 这指定了 my_dict 是一个字典,其中键的类型是 str

  2. Union[str, ...] : 这指定了字典的值可以是多种类型中的一种,在本例中是 str 或另一个字典。

  3. Dict[str, Union[bool, int]] : 这指定了字典的值中嵌套的字典,其中键的类型是 str ,值的类型可以是 bool int

换句话说,这种类型声明表示:

  • my_dict 是一个字典。
  • 它的键必须是字符串。
  • 它的值可以是:
    • 字符串
    • 另一个字典,该字典的键是字符串,值可以是布尔值或整数。

这与你的 my_dict 示例相匹配,因为它包含:

  • 字符串值 ( "value_1" )
  • 嵌套字典,其中包含布尔值 ( True ) 和整数 ( 1200 ) 值。

使用 Union 可以让你灵活地指定字典可以包含不同类型的多个值。

标签:python,python-typing
From: 51277457

相关文章

  • Python TypedDict:继承另一个TypedDict时的函数语法
    给定这种类型:classTPerson(TypedDict):name:straddress:str我想要另一个TypedDict继承前一个,例如:classTDealer(TPerson):db-id:intpolice_record:strarrested_now:boolclassTConsumer(TPerson):db-id:intpreferred_product:......
  • 如何让 python 类型在需要父类时将子类识别为有效类型?
    这是我需要做的一个最小示例:fromtypingimportCallable,AnyclassData:passclassSpecificData(Data):passclassEvent:passclassSpecificEvent(Event):passdefdetect_specific_event(data:SpecificData,other_info:str)->Specif......
  • 使用 Python + Beautiful Soup 抓取任何包含 5 个数字的字符串
    我住在德国,那里的邮政编码在大多数情况下都是5位数字。53525。我真的很想使用beautifulSoup从网站中提取该信息。我是Python/BeautifulSoup的新手,我不知道如何将“查找连续的每5个数字+“空格””翻译成Python语言。importrequestsimporturllib.re......
  • 如何测试 python 类型协议是另一个协议的子类?
    该问题的明显解决方案是使用issubclass,但这会引发TypeError(使用Python3.6.7),例如>>>fromtyping_extensionsimportProtocol>>>classProtoSubclass(Protocol):...pass...>>>issubclass(ProtoSubclass,Protocol)Traceback(mos......
  • Python:指定与继承一起使用的类方法的返回类型
    我一直在尝试了解如何在Python中指定类方法的返回类型,以便即使对于子类也能正确解释它(例如在我的Sphinx文档中)。假设我有:classParent:@classmethoddefa_class_method(cls)->'Parent':returncls()classChild(Parent):pass什么如......
  • python使用SMTP功能发送邮件
    网页格式发送for_email.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>h1{color:brown;}p{margin:5px;color:purple......
  • python之代码简化式(列表、字典生成式,递归函数,迭代器(iter)和生成器(yield)、匿名函数(
    文章目录前言1、列表、字典生成式2、递归函数2.1python中代码的递归深度(扩展)3、拓展:迭代器和生成器3.1迭代器(iter)3.2生成器(yield)4、匿名函数(lambda)4.1map函数4.2reduce函数(较少使用)4.3filter函数前言本文主要讲解一些简化代码格式的一些方法,方便大家更好的......
  • Python:在 Protocol 和 TypedDict 之间共享类型注释
    举这个简单的例子:from__future__importannotationsimporttypingastclassMyType:def__init__(self,s:str,i:int)->None:self.s=sself.i=iclassMyProto(t.Protocol):s:stri:intclassMyDict(t.TypedDict):......
  • PIL 和 python 静态类型
    我有一个函数参数,它可以接受图像的多种类型:defsomefunc(img:Union[np.array,Image,Path,str]):PILImage在这种情况下抛出以下异常:TypeError:Union[arg,...]:eachargmustbeatype.Got<module'PIL.Image'from...进一步检查图像对象后这才有......
  • 学会用Python爬取小说网站,想看什么就爬什么,广告也不用看了~
    今天以爬取笔趣阁小说网站为例,练习Python爬虫技术。通过这个爬虫,可以完成批量爬取一本小说的所有章节,并将所有章节内容按顺序保存到一个txt文档内,下面我们就开始吧。首先,百度搜索“笔趣阁”,发现有很多网站都叫笔趣阁。我们可以随便挑选一个网站尝试,本文我以‘https://......