【发布时间】:2019-03-19 12:11:06
【问题描述】:
我如何表达Dict 的类型,它有两个键,可以采用两种不同类型的值?例如:
a = {'1': [], '2': {})
以下内容只是为了让您了解我在寻找什么。
字典[(str, List), (str, Set)]
【问题讨论】:
-
这在 [大多数] 静态类型语言中也不支持。考虑一个联合(例如“记录”或“元组”)来分解类型。
标签: python dictionary
我如何表达Dict 的类型,它有两个键,可以采用两种不同类型的值?例如:
a = {'1': [], '2': {})
以下内容只是为了让您了解我在寻找什么。
字典[(str, List), (str, Set)]
【问题讨论】:
标签: python dictionary
您询问的功能称为“异构字典”,您需要在其中为特定键定义特定类型的值。该问题正在Type for heterogeneous dictionaries with string keys 讨论,尚未实施,并且仍处于开放状态。当前的想法是使用所谓的TypedDict,它允许使用如下语法:
class HeterogeneousDictionary(TypedDict):
x: List
y: Set
请注意,mypy project 已通过“mypy 扩展”(标记为实验性)提供此类型 - TypedDict:
from mypy_extensions import TypedDict
HeterogeneousDictionary = TypedDict('HeterogeneousDictionary', {'1': List, '2': Set})
至少,我们可以使用Union 来要求值是List 或Set:
from typing import Dict, List, Set, Union
def f(a: Dict[str, Union[List, Set]]):
pass
当然,这并不理想,因为我们丢失了很多关于哪些键需要具有哪些类型的值的信息。
【讨论】:
TypedDict 在 Python 3.8 中添加。答案应该更新。