注意:由于这个答案一直被点赞,虽然仍然有使用
我希望有一种良好的(`mypy --strict`和符合Python风格)方式,将一个未类型化的`dict`(来自`json.loads()`)转换为`TypedDict`。我的目前方法如下:
我有一个带有可选键的TypedDict,并且想要一个TypedDict实例。
上面的代码是多余和非功能性的(从函数式编程的角度来看),因为我必须四次写入名称,两次写入类型,并且result必须是可变的。 遗憾的是,TypedDict不能有方法,否则我可以写出类似的东西。
关于,我是否有什么遗漏的地方?这个能不能以一种简洁、非冗余的方式写出来?
TypedDict
的情况,但我认为今天应该使用dataclass
代替。
我希望有一种良好的(`mypy --strict`和符合Python风格)方式,将一个未类型化的`dict`(来自`json.loads()`)转换为`TypedDict`。我的目前方法如下:
class BackupData(TypedDict, total=False):
archive_name: str
archive_size: int
transfer_size: int
transfer_time: float
error: str
def to_backup_data(data: Mapping[str, Any]) -> BackupData:
result = BackupData()
if 'archive_name' in data:
result['archive_name'] = str(data['archive_name'])
if 'archive_size' in data:
result['archive_size'] = int(data['archive_size'])
if 'transfer_size' in data:
result['transfer_size'] = int(data['transfer_size'])
if 'transfer_time' in data:
result['transfer_time'] = int(data['transfer_time'])
if 'error' in data:
result['error'] = str(data['error'])
return result
我有一个带有可选键的TypedDict,并且想要一个TypedDict实例。
上面的代码是多余和非功能性的(从函数式编程的角度来看),因为我必须四次写入名称,两次写入类型,并且result必须是可变的。 遗憾的是,TypedDict不能有方法,否则我可以写出类似的东西。
backup_data = BackupData.from(json.loads({...}))
关于,我是否有什么遗漏的地方?这个能不能以一种简洁、非冗余的方式写出来?
archive_name
是None
,那么生成的数据将显示为"None"
,因为str(None)->"None"
。 - Joe Sadoskierror = None
的示例,它确实会产生字符串“'None'”。不幸的是,在输入答案时,我没有给予它更多的关注。如果您想接受None
作为可能的答案,则输入应为Optional[str]
,对于该解决方案将无法使用。 - Thymen