【发布时间】:2019-09-09 08:15:38
【问题描述】:
有一个很棒的 Q/A here already 用于在 python 中创建 untyped 字典。我正在努力弄清楚如何创建一个 typed 字典,然后向其中添加内容。
我正在尝试做的一个例子是......
return_value = Dict[str,str]
for item in some_other_list:
if item.property1 > 9:
return_value.update(item.name, "d'oh")
return return_value
...但这给我带来了descriptor 'update' requires a 'dict' object but received a 'str'的错误
我已经尝试了上述声明的其他几种排列方式
return_value:Dict[str,str] = None
'NoneType' object has no attribute 'update' 出错。并尝试
return_value:Dict[str,str] = dict()
或
return_value:Dict[str,str] = {}
update expected at most 1 arguments, got 2 的两个错误。我不知道这里需要什么来创建一个空类型的字典,就像我在 c# (var d = new Dictionary<string, string>();) 中那样。如果可能的话,我宁愿不回避类型安全。有人可以指出我遗漏了什么或做错了什么吗?
【问题讨论】:
-
return_value不是dict;它是一个表示dict的type 的对象。您从typing导入的内容仅用于类型提示,而不是实际值。 -
注意,类型注释不给你类型安全。 Python 中没有“类型化字典”,无论如何都不是内置的。注释用于文档或第三方静态时间类型检查器使用,例如
mypy。 -
另外,在
dict中分配一个键值对,你可以使用my_dict[key] = value。.update采用另一个映射,例如另一个字典,并更新您作为参数传递的映射中的键值对。所以你 可以 做my_dict.update({key:value})但这对于单个项目来说是相当浪费的(创建一个完全不必要的中间 dict 对象)。或者,您可以将关键字参数传递给.update,如下所示:my_dict.update(foo='bar', baz='bing')从可读性的角度来看,这有时很好
标签: python dictionary strong-typing