在for循环中构建dict时使用eval。名称未定义

时间:2015-03-04 14:31:19

标签: python dictionary eval

很奇怪为什么这种语法不会像我期望的那样表现。

在一个类的 init 里面接受多个参数(id,departmentId,active),我有以下变量:

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'未定义

我很困惑为什么会出现这种情况,因为至少对我而言,这种语法似乎完全符合逻辑。当我从两个列表中创建字典时,在该庄园中构建字典工作正常,而不是在我从属性字典的键列表或键列表中进行操作时。

编辑:Windows上的Python 2.7.9,如果这有任何区别,请点击此处。

1 个答案:

答案 0 :(得分:0)

键给出的变量不在理解范围内。如果我使用循环,它对我有用:

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)