Numpy 将字典作为变量导入当前范围

Numpy 将字典作为变量导入当前范围,numpy,python,scipy,Numpy,Python,Scipy,我有一个.mat文件,我把以前处理过的数据放在其中。当我表演的时候 dict = scipy.io.loadmat('training_data.mat') 我得到了一份这样的口述 {'encoders' : ......, 'decoders' : ........, 'stuff' : .....} 我想有选择地将编码器和解码器变量导入我的当前作用域。其效果与以下相同: encoders = dict['encoders'] decoders = dict['decoders'] 如何

我有一个.mat文件,我把以前处理过的数据放在其中。当我表演的时候

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()
返回的字典——只需在文档中查找即可。