2011-03-03 22 views
0

我有一個.mat文件,我在其中放入之前處理過的數據。當我執行將字典導入當前作用域作爲變量

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

我回來的字典是這樣

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

我想將編碼器解碼器變量選擇導入到我目前的範圍。效果是一樣的:

encoders = dict['encoders'] 
decoders = dict['decoders'] 

如何幹淨地做到這一點,而不輸入10-15行?

回答

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" 

這可能也有選擇地完成。

+0

我相信你真的希望locals()不是全局變量(),因爲他指定了當前範圍。 locals()。update(d) – 2011-03-03 20:55:33

+0

@John:正如我在回答中已經指出的那樣,不支持修改由locals()返回的字典 - 只需在文檔中查看即可。 – 2011-03-03 21:33:08