在 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)