все Python 3astпонятие
ast.Dict
литералы
Узел литерала словаря {k: v}: два параллельных списка keys и values. Распаковка **d попадает туда же — с ключом None.
Синтаксис
ast.Dict(keys, values)
Ключи и значения хранятся порознь, а пару собирают через zip(node.keys, node.values). Элемент {**other} даёт ключ None, а значение — само выражение other, поэтому код, который ждёт в keys только узлы, падает на None с AttributeError. Вызов dict(a=1) — это не Dict, а Call, а генератор {k: v for …} — отдельный узел DictComp.
Примеры
import ast
node = ast.parse("{'a': 1, **extra}", mode='eval').body
print(type(node).__name__, len(node.keys)) # → Dict 2
print(node.keys[0].value, node.keys[1], node.values[1].id) # → a None extra
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности