在 for 循环中构建字典时使用 eval。名称未定义
Use of eval when building a dict in a for loop. Name is not defined
主要是好奇为什么这个语法没有按照我期望的方式运行。
在接受多个参数(id、departmentId、active)的 class 的 init 中,我有以下变量:
attributes = [
{'id': 5},
{'departmentId': 10},
{'active': True}
]
本质上,我正在尝试构建一个字典,其中键是属性列表中每个项目的第一个键,值是通过获取其 eval 的该键字符串的参数变量。
这个有效:
keys = [k.keys()[0] for k in attributes]
values = [eval(v) for v in keys]
vdict = {keys[i]: values[i] for i,v in enumerate(keys)}
但是,这不起作用:
vdict = {a.keys()[0]: eval(a.keys()[0]) for a in attributes}
这也不行:
keys = [k.keys()[0] for k in attributes
vdict = {v: eval(v) for v in keys}
这样做会引发 NameError: name 'id' is not defined
我很困惑为什么会这样,因为至少对我来说,这种语法似乎完全合乎逻辑。当我从两个列表中构建字典时,在那个庄园中构建字典工作正常,当我从属性字典的键列表或键列表中构建字典时效果不佳。
编辑:Python 2.7.9 on Windows 如果有任何不同,请点击此处。
按键给出的变量不在理解范围内。如果我使用循环,它对我有用:
class TestClass(object):
def __init__(self, id, departmentId, active):
values = [
{'id': 5},
{'departmentId': 10},
{'active': True}]
vdict = {}
for a in values:
vdict[list(a.keys())[0]] = eval(list(a.keys())[0])
print(vdict)
var = TestClass(1,2,False)
主要是好奇为什么这个语法没有按照我期望的方式运行。
在接受多个参数(id、departmentId、active)的 class 的 init 中,我有以下变量:
attributes = [
{'id': 5},
{'departmentId': 10},
{'active': True}
]
本质上,我正在尝试构建一个字典,其中键是属性列表中每个项目的第一个键,值是通过获取其 eval 的该键字符串的参数变量。
这个有效:
keys = [k.keys()[0] for k in attributes]
values = [eval(v) for v in keys]
vdict = {keys[i]: values[i] for i,v in enumerate(keys)}
但是,这不起作用:
vdict = {a.keys()[0]: eval(a.keys()[0]) for a in attributes}
这也不行:
keys = [k.keys()[0] for k in attributes
vdict = {v: eval(v) for v in keys}
这样做会引发 NameError: name 'id' is not defined
我很困惑为什么会这样,因为至少对我来说,这种语法似乎完全合乎逻辑。当我从两个列表中构建字典时,在那个庄园中构建字典工作正常,当我从属性字典的键列表或键列表中构建字典时效果不佳。
编辑:Python 2.7.9 on Windows 如果有任何不同,请点击此处。
按键给出的变量不在理解范围内。如果我使用循环,它对我有用:
class TestClass(object):
def __init__(self, id, departmentId, active):
values = [
{'id': 5},
{'departmentId': 10},
{'active': True}]
vdict = {}
for a in values:
vdict[list(a.keys())[0]] = eval(list(a.keys())[0])
print(vdict)
var = TestClass(1,2,False)