簡體   English   中英

mypy和嵌套dict理解

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM