使用locals()的Python字典推导式导致KeyError
>>> 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}
。
2 个回答
2
你可以试试用 globals()
来代替:
print {key : globals()[key] for key in ["a"]}
因为 a
在字典推导式的范围内没有定义(正如 @MartijnPieters 所说的)。
12
字典推导式有自己的命名空间,也就是说在这个命名空间里,locals()
里是找不到 a
这个变量的。简单来说,除了最外层的可迭代对象(这里是 ["a"]
)以外,其他的代码几乎都是在一个嵌套函数里运行的,最外层的可迭代对象会作为参数传进去。
如果你用 globals()
来替代,或者在字典推导式 外部 创建一个对 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}