[英]mypy and nested dict comprehension
我絕對不是mypy的專家,但是我確實不了解一個錯誤。
假設我有這本字典,我想解析它並通過dict理解創建另一個字典。
my_dict = {
'type1': {
'category1': [
'subcategory1',
'subcategory2',
],
},
'type2': {
'category2': [
'subcategory3',
],
'category3': [],
},
}
字典理解:
new_dict = {
subcategory: {
'category': category,
'type': type,
}
for type, categories in my_dict.items()
for category, subcategories in categories.items()
for subcategory in subcategories
}
和預期的輸出:
{
'subcategory1': {
'category': 'category1',
'type': 'type1'
},
'subcategory2': {
'category': 'category1',
'type': 'type1'
},
'subcategory3': {
'category': 'category2',
'type': 'type2'
}
}
在這種情況下,mypy會因為category3
為空而抱怨,但出現了一條錯誤消息( 'error:"object" has no attribute "items"'
),該消息指向上一行。
有什么建議嗎?
提前致謝
問題是mypy無法推斷my_dict
的類型-對於mypy而言自然無法推斷類型太復雜。
您可以通過在運行mypy之前添加reveal_type(my_dict)
行來自己確認。 (Mypy特有的函數名稱有助於調試)。 推斷的類型最終是Dict[str, object]
或類似的東西。
您可以通過顯式my_dict
類型來解決此問題。 如果您使用的是Python 3.6+,則可以使用新的變量注釋語法來這樣做,如下所示:
from typing import Dict, List
my_dict: Dict[str, Dict[str, List[str]]] = { ... }
如果您使用的是Python的早期版本,請使用基於注釋的語法對變量進行注釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.