>>> a = 1
>>> print { key: locals()[key] for key in ["a"] }
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <dictcomp>
KeyError: 'a'
如何创建具有这样理解的字典?
>>> a = 1
>>> print { key: locals()[key] for key in ["a"] }
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <dictcomp>
KeyError: 'a'
如何创建具有这样理解的字典?
dict 理解有它自己的命名空间,并且locals()
在那个命名空间中没有a
. 从技术上讲,除了最外层可迭代对象(此处["a"]
)的初始可迭代对象之外的所有内容几乎都作为嵌套函数运行,最外层可迭代对象作为参数传入。
如果您globals()
改为使用,或者在dict 理解之外locals()
创建对字典的引用,您的代码就可以工作:
l = locals()
print { key: l[key] for key in ["a"] }
演示:
>>> a = 1
>>> l = locals()
>>> { key: l[key] for key in ["a"] }
{'a': 1}
>>> { key: globals()[key] for key in ["a"] }
{'a': 1}
您可以尝试globals()
改用:
print {key : globals()[key] for key in ["a"]}
因为a
没有在字典理解的范围内定义(正如@MartijnPieters 所说)。