首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mypy:定义动态字典中特定键的类型

mypy:定义动态字典中特定键的类型
EN

Stack Overflow用户
提问于 2019-06-20 08:13:05
回答 1查看 2.2K关注 0票数 3

我有下面的字典,它代表了一个人,可能是许多变体中的一个。这里只有几个:

代码语言:javascript
复制
person = {"name": "Johnny"}
person = {"name": "Johnny", "age": 25}
person = {"name": "Johnny", "age": 25, "active": True}

我正在提取某些键,并使用它们来打印一条语句。问题出现在类型提示中,当我在脚本上运行mypy时,我得到了一个错误Incompatible types in assignment (expression has type "object", variable has type "Optional[str]")

代码语言:javascript
复制
name: Optional[str] = person.get("name")  # mypy error here
age: Optional[int] = person.get("age")    # mypy error here
if name and age:
    print(f"In 5 years, {name} will be {age + 5} years old")

为了解决这个问题,mypy_extensions.TypedDict类型似乎很有希望,但似乎我不能有丢失或额外的键:

代码语言:javascript
复制
from mypy_extensions import TypedDict
PersonDict = TypedDict("PersonDict", {"name": str, "age": int})

# ERROR: Key 'age' missing for TypedDict "PersonDict"
person: PersonDict = {"name": "Johnny"}

# ERROR: Extra key 'active' for TypedDict "PersonDict"
person: PersonDict = {"name": "Johnny", "age": 25, "active": True}

有没有办法为字典中的特定键定义类型,即使字典中的键是动态的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-29 09:12:54

total=False添加到您的TypedDict将允许缺少密钥:

代码语言:javascript
复制
PersonDict = TypedDict("PersonDict", {"name": str, "age": int}, total=False)

https://mypy.readthedocs.io/en/latest/more_types.html#totality

允许不在架构中的其他键似乎是不可能的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56677431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档