使用locals()的Python字典理解给出了KeyError

时间:2014-03-18 16:30:32

标签: python dictionary dictionary-comprehension

>>> 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'

如何创建一个具有这样理解能力的字典?

2 个答案:

答案 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所说)。