Python 3.x 如何使用整数键生成TypedAct?

Python 3.x 如何使用整数键生成TypedAct?,python-3.x,integer,type-hinting,typeddict,Python 3.x,Integer,Type Hinting,Typeddict,是否可以将整型键与TypedDict一起使用(类似于dict?) 尝试一个简单的例子: 从输入import-TypedDict开始 类移动(TypedDict): 0:int=1 1:int=2 抛出:SyntaxError:注释的非法目标 似乎只支持映射[str,int],但我想确认一下。在中没有明确说明TypedDict的意图在以下内容中有明确说明(重点添加): 本PEP提出了一个类型构造函数typing.TypedDict,以支持字典对象具有特定字符串键集的用例,每个字符串键都具有特定类

是否可以将整型键与TypedDict一起使用(类似于dict?)

尝试一个简单的例子:

从输入import-TypedDict开始
类移动(TypedDict):
0:int=1
1:int=2
抛出:
SyntaxError:注释的非法目标


似乎只支持
映射[str,int]
,但我想确认一下。在

中没有明确说明TypedDict的意图在以下内容中有明确说明(重点添加):

本PEP提出了一个类型构造函数
typing.TypedDict
,以支持字典对象具有特定字符串键集的用例,每个字符串键都具有特定类型的值

如果预期的用例在类语法中都是可注释的,则隐式地仅适用于由构成有效标识符的字符串(可以用作属性或关键字参数名称的内容)键入的
dict
s,而不是一般的字符串。因此,正如预期的那样,
int
键不是一件事,这只是为了启用一个类,该类使用类似于
dict
的语法来访问“属性”,而不是属性访问语法

虽然允许与3.6之前的Python兼容,但允许这样做(以及允许非有效Python标识符的字符串),例如:

您只能使用
dict
文本(例如
Moves({0:123,1:456})
)来构造它,因为像
Moves(0=123,1=456)
这样更干净的关键字语法不起作用。即使这在技术上是在运行时起作用的(毕竟,这只是
dict
s的幕后操作),验证类型正确性的实际类型检查器可能不支持它(因为意图和记录的用法专门处理构成有效标识符的字符串)

关键是,不要这样做。对于您在这里描述的简单情况(从零开始的连续整数“键”,其中每个位置都有独立的含义,它们的类型可能不同,也可能不同),您实际上只需要一个
元组

Moves = typing.Tuple[int, int]  # Could be [int, str] if index 1 should be a string
将以相同的方式用于注释,并且代码中的实际使用点将只是正常的
元组
语法(
返回1,2

如果您确实希望在创建实例时能够使用名称
Moves
,则在3.9+上,您可以使用来执行(无需导入):

允许您编写:

return Moves((1, 2))

当你想做一个“实例”的时候。不涉及运行时检查(这大致相当于在运行时运行
tuple((1,2))
),但是静态类型检查程序应该理解其意图。

在基于类的语法中,您不能。标识符不能以数字开头。改为使用。数字键的模式是什么?如果键是连续的(索引就是键),
list[int]
可能更合适。@Carcigenicate这是有意义的。我还是想知道答案。这能回答你的问题吗?
Moves = tuple[int, int]
return Moves((1, 2))