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

时间:2011-03-03 18:43:16

标签: numpy python scipy

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

dict = scipy.io.loadmat('training_data.mat')

我找回了像这样的词典

{'encoders' : ......, 'decoders' : ........, 'stuff' : .....}

我想有选择地将编码器解码器变量导入我当前的范围。效果与:

相同
encoders = dict['encoders']
decoders = dict['decoders']

如何在不输入10-15行的情况下干净利落地完成此操作?

1 个答案:

答案 0 :(得分:3)

您可以使用

将字典d导入全局范围
globals().update(d)

对于本地范围,同样的事情是不可能的,因为修改locals()返回的字典会导致未定义的行为。

在这种情况下您可以使用的一个稍微狡猾的技巧是将名称导入到即时创建类型的字典中:

d = {"encoders": 1, "decoders": 2}
t = type("", (), d)
print t.encoders
print t.decoders

这至少比使用d["decoders"]等更方便。

或者,您可以使用exec语句来创建变量:

d = {"encoders": 1, "decoders": 2}
for k, v in d.iteritems():
    exec k + " = v"

这也可以有选择地完成。