【发布时间】:2021-01-20 07:17:26
【问题描述】:
我有一个字典,其中键和值的类型是固定的。我想在TypedDict 中定义类型如下:
class MyTable(TypedDict):
caption: List[str]
header: List[str]
table: pd.DataFrame
epilogue: List[str]
我有一个返回MyTable 的函数。我想先定义一个空的(Typed)dict 并填写键和值。
def returnsMyTable():
result = {}
result['caption'] = ['caption line 1','caption line 2']
result['header'] = ['header line 1','header line 2']
result['table'] = pd.DataFrame()
result['epilogue'] = ['epilogue line 1','epilogue line 2']
return result
这里 MyPy 抱怨需要对结果进行类型注释。我试过这个:
result: MyTable = {}
但随后 MyPy 抱怨缺少密钥。同样,如果我定义了键但将值设置为None,它会抱怨值的类型不正确。
是否可以先将 TypedDict 初始化为空 Dict,然后再填写键和值? docs 似乎表明它是。
我想我可以先将值定义为变量,然后再组装MyTable,但我正在处理要添加类型提示的遗留代码。所以我想尽量减少工作。
【问题讨论】:
-
returnsMyTable不只包含一个dict文字,立即分配键和值有什么原因吗? -
由于值的推导相当复杂,因此在 1 行中创建
MyTable是不可行的。就像我写的那样,我可以首先将这些值定义为单独的值,但我正在处理以这种方式设置的遗留代码。这适用于result = MyTable(header=[''],caption=[''],table=pd.DataFrame(),epilogue=['']),但似乎相当不合Python -
除非您澄清“遗留代码”的问题,否则我认为我们无法真正帮助您。如果您知道结果是正确的,唯一的通用解决方案是
# type: ignore问题。 -
对于“遗留代码”,我只是指一个预先存在的代码库,我正在向其中添加类型提示。它没有问题,但除了添加类型提示之外,我想进行最小的更改。