很奇怪为什么这种语法不会像我期望的那样表现。
在一个类的 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,如果这有任何区别,请点击此处。
答案 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)