Подсказка типа для dict дает TypeError: объект «тип» не подлежит подписке

memo: dict[int, int] = {0: 0, 1: 1} # *our base cases*

возвращает следующую ошибку:

TypeError: 'type' object is not subscriptable

person Robert Li    schedule 29.11.2019    source источник
comment
Этот синтаксис в настоящее время действителен, поскольку Python 3.9 добавил подсказки типов в стандартные коллекции.   -  person warownia1    schedule 13.04.2021


Ответы (2)


Я думаю, вы должны использовать Dict, например:

from typing import Dict

memo: Dict[int, int] = {0: 0, 1: 1}

В вашем случае вы использовали dict типа type

>>> type(dict)
<class 'type'>
>>> type(Dict)
<class 'typing._GenericAlias'>
person David_Zizu    schedule 29.11.2019
comment
в чем разница между дикт и дикт? - person Robert Li; 29.11.2019
comment
@RobertLi dict — это встроенный тип данных и Dict соответствующий тип. - person hiro protagonist; 29.11.2019
comment
@hiroprotagonist прав. Увидите разницу в ответе - person David_Zizu; 29.11.2019
comment
Начиная с Python 3.9 вы можете использовать встроенные типы в аннотациях. Из модуля ввода: эти типы стали избыточными в Python 3.9, когда соответствующие ранее существовавшие классы были улучшены для поддержки [] - person rysson; 16.03.2021

Вы можете сделать что-то вроде:

from typing import Dict
mydict = Dict[int, int]

mydict = {0: 0, 1: 1} 

Результат:

>>>mydict
{0: 0, 1: 1}

Если это то, что вы хотели.

person automationleg    schedule 29.11.2019