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

如何创建具有这样理解的字典?

4

2 回答 2

12

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}
于 2014-03-18T16:34:52.677 回答
2

您可以尝试globals()改用:

print {key : globals()[key] for key in ["a"]}

因为a没有在字典理解的范围内定义(正如@MartijnPieters 所说)。

于 2014-03-18T16:36:10.700 回答