是否可以在 TypedDict 中使用整数键(类似于 dict?)。
尝试一个简单的示例:
from typing import TypedDict
class Moves(TypedDict):
0: int=1
1: int=2
抛出:
SyntaxError: illegal target for annotation
似乎只支持
Mapping[str, int]
,但我想确认一下。
Pep 文档中没有具体说明。
很遗憾,TypedDict 不直接支持使用整数键。它们的设计初衷是镜像 Python 字典,而 Python 字典要求键必须是字符串(或更具体地说,是可哈希的类型)。
虽然 PEP 589 没有明确排除整数键,但它强调 TypedDict 的目的是实现结构化字典,其中键通常是描述性的字符串。
以下是一些处理这种情况的替代方案:
- 使用字符串键: 最直接的方法是使用字符串键,即使它们表示数字:
from typing import TypedDict
class Moves(TypedDict):
"0": int
"1": int
- 使用常规字典: 如果你需要整数键的灵活性,可以使用常规字典和类型提示:
from typing import Dict
Moves = Dict[int, int]
- 创建自定义类: 对于更复杂的场景,创建一个自定义类可以提供更大的控制权:
class Moves:
def __init__(self):
self.moves: Dict[int, int] = {}
def add_move(self, index: int, value: int):
self.moves[index] = value
def get_move(self, index: int) -> int:
return self.moves[index]
选择哪种方法取决于你的具体用例和对类型安全性的需求。
标签:python,python-typing,typeddict From: 65568841