Numpy 将字典作为变量导入当前范围
我有一个.mat文件,我把以前处理过的数据放在其中。当我表演的时候Numpy 将字典作为变量导入当前范围,numpy,python,scipy,Numpy,Python,Scipy,我有一个.mat文件,我把以前处理过的数据放在其中。当我表演的时候 dict = scipy.io.loadmat('training_data.mat') 我得到了一份这样的口述 {'encoders' : ......, 'decoders' : ........, 'stuff' : .....} 我想有选择地将编码器和解码器变量导入我的当前作用域。其效果与以下相同: encoders = dict['encoders'] decoders = dict['decoders'] 如何
dict = scipy.io.loadmat('training_data.mat')
我得到了一份这样的口述
{'encoders' : ......, 'decoders' : ........, 'stuff' : .....}
我想有选择地将编码器和解码器变量导入我的当前作用域。其效果与以下相同:
encoders = dict['encoders']
decoders = dict['decoders']
如何在不键入10-15行的情况下干净利落地执行此操作?您可以使用
globals().update(d)
对于局部作用域,同样的事情是不可能的,因为修改locals()
返回的字典会导致未定义的行为
在这种情况下,您可能会使用一种略显粗糙的技巧,将名称导入即时创建类型的字典中:
d = {"encoders": 1, "decoders": 2}
t = type("", (), d)
print t.encoders
print t.decoders
这至少比使用d[“解码器”]
等稍微方便一些
或者,您可以使用exec
语句创建变量:
d = {"encoders": 1, "decoders": 2}
for k, v in d.iteritems():
exec k + " = v"
这也可以有选择地完成。您可以使用
globals().update(d)
对于局部作用域,同样的事情是不可能的,因为修改locals()
返回的字典会导致未定义的行为
在这种情况下,您可能会使用一种略显粗糙的技巧,将名称导入即时创建类型的字典中:
d = {"encoders": 1, "decoders": 2}
t = type("", (), d)
print t.encoders
print t.decoders
这至少比使用d[“解码器”]
等稍微方便一些
或者,您可以使用exec
语句创建变量:
d = {"encoders": 1, "decoders": 2}
for k, v in d.iteritems():
exec k + " = v"
这也可以有选择地完成。我相信您实际上需要的是locals()而不是globals(),因为他指定了当前范围。locals().update(d)@John:正如我在回答中已经指出的,修改由
locals()
返回的字典是不受支持的——只需在文档中查找即可。我相信你实际上想要的是locals()而不是globals(),因为他指定了当前的作用域。更新(d)@John:正如我在回答中已经指出的那样,不支持修改由locals()
返回的字典——只需在文档中查找即可。