How to create a new typing.Dict[str,str] and add items to it
这里已经有一个很好的Q/A用于在Python中创建非类型化字典。我正在努力找出如何创建一个类型化词典,然后在其中添加一些东西。
我想做的一个例子是…
1 2 3 4 5
| 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 |
…但这让我犯了一个错误
我试过上述声明的其他一些排列
1
| return_value:Dict[str,str] = None |
'NoneType' object has no attribute 'update'错误。尝试
1
| return_value:Dict[str,str] = dict() |
或
1
| return_value:Dict[str,str] = {} |
update expected at most 1 arguments, got 2都有错误。我不知道在这里需要什么来创建一个空类型的字典,就像我在c(var d = new Dictionary();中所做的那样)。如果可能的话,我宁愿不避开类型安全。有人能指出我遗漏了什么或做得不正确吗?
- return_value不是dict;它是一个表示dict类型的对象。从typing导入的内容仅用于类型提示,而不是实际值。
- 注意,类型注释不能为您提供类型安全性。在python中没有"typed dict",也没有内置的。注释用于文档或使用第三方静态时间类型检查程序,如mypy。
- 另外,在一个dict中分配一个单键值对,您可以执行my_dict[key] = value。.update接受另一个映射,例如另一个dict,并更新作为参数传递的映射中的键值对。所以您可以执行my_dict.update({key:value}),但对于单个项目来说这是相当浪费的(创建一个完全不必要的中间dict对象)。或者,您可以将关键字参数传递给.update,例如:my_dict.update(foo='bar', baz='bing'),从可读性的角度来看,这有时是很好的。
像Dict这样的东西不打算在运行时使用;它们是表示用于静态类型分析的类型的对象。如果你想听写,你必须用
不能使用Dict创建具有受限运行时类型的对象。
- 或者更习惯地说,EDOCX1(0;)
- 只是想强调一下,dict和dict是不同的。
- 同样,列表是否更常见地被指定为()而不是list()?
- ()为空元组;[]为空列表。使用文本更有效,因为不需要查找名称。
最后2个是EDOCX1的正确用法(0),但是您在for循环中用不正确的语法更新了字典。
1 2 3 4 5
| return_value: Dict[str, str] = dict()
for item in some_other_list:
if item.property1 > 9:
return_value[item.name] ="d'oh"
return return_value |
- 谢谢,我在发帖15分钟后就知道了。我花了几个小时才到达那个点=/。我能找到的关于Dict[]的例子有.update(key,value)。