>>> 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'
如何创建一个具有这样理解能力的字典?
答案 0 :(得分:12)
dict理解有自己的命名空间,该命名空间中的locals()
没有a
。从技术上讲,除了最外层可迭代的最初迭代(此处为["a"]
)之外的所有内容几乎都作为嵌套函数运行,最外面的iterable作为参数传入。
如果您使用globals()
代替,或者创建了对字典理解之外的<{1}}字典 的引用,则代码可以正常运行:
locals()
演示:
l = locals()
print { key: l[key] for key in ["a"] }
答案 1 :(得分:2)
您可以尝试使用globals()
代替:
print {key : globals()[key] for key in ["a"]}
因为a
没有在dict理解的范围内定义(如@MartijnPieters所说)。