Uly*_*ses 12 python dictionary
我有以下代码段:
a, b = 1, 2
params = ['a', 'b']
res = {p: vars()[p] for p in params}
Run Code Online (Sandbox Code Playgroud)
这给了我,KeyError: 'a'而以下代码工作正常:
a, b = 1, 2
params = ['a', 'b']
res = {}
for p in params:
res[p] = vars()[p]
Run Code Online (Sandbox Code Playgroud)
这有什么区别?
vars()没有任何参数的行为locals(),因为字典理解有自己的范围,它没有名为a或的变量b.
你可以eval()在这里使用.没有任何参数,它将以LEGB方式执行,或明确指定globals()dict eval:
>>> res = {p: eval(p) for p in params}
>>> res
{'a': 1, 'b': 2}
Run Code Online (Sandbox Code Playgroud)
但是,如果您想使用名称访问变量,那么正确的方法是从头开始创建字典.
因为在你的代码中vars返回一个包含局部变量的字典.实际上基于文档:
没有参数,vars()就像locals()一样.
请参阅以下示例:
>>> def a():
... print vars()
...
>>> a()
{}
Run Code Online (Sandbox Code Playgroud)
如您所见,我们在函数中没有任何局部变量,a因此vars返回一个空字典.
在您的情况下,作为一种更加pythonic的方式,您可以创建对象的字典:
d={'a':1,'b': 2,'params' : ['a', 'b']}
example_list : ['a', 'b']
res = {p: d[p] for p in example_list}
Run Code Online (Sandbox Code Playgroud)