2016-03-28 11 views
2

私はpickle内の辞書に何十もの変数を持っています。特定の条件が満たされている場合は、これらの変数(すべての異なるタイプ)のすべてを、辞書のキーと同じ名前で復元する必要があります。python 3.xはpickleから変数を復元します

私は問題を指摘するためにコードを簡略化しました。たとえば、キーの1つは 'ref10_data'です。変数が関数内の他の場所で定義されている場合は、上書きされませんが、そうしたいと思います。

import _pickle as pickle 
from numpy import max 

def main(): 
    processing_path = '/data/common/PROBSEV_DATA/processing/' 
    ref10_data = 0 
    restore_dict = pickle.load(open(processing_path + 'cc_rt_prob_svr.out','rb')) 

    for key in restore_dict: 
    globals()[key] = restore_dict[key] 

    print(max(ref10_data)) 

if __name__ == '__main__': 
    main() 

「0」が印刷されます。このquestion/answerは動作しますが、以前に定義されていれば変数を上書きしません。変数を再定義するにはどうすればよいのですか?あるいは、この機能を構造化する良い方法がありますか?おかげさまで 代わりにinellegantとunpythonicあるglobals、改ざんの

+2

なぜ辞書で使用しないのですか? – jonrsharpe

答えて

0

は、単に別の関数にキーワード引数として変数(「kwargsから」)を渡すことができます。

def foo(ref10_data, another_var, yet_another_var): 
    print(max(ref10_data)) 

def main(): 
    ... 
    restore_dict = pickle.load(...) 
    foo(**restore_dict) 

これは、簡単で直感的、かつニシキヘビです。

関連する問題