2017-10-24 17 views
0

私は、スペイン語の単語と定義でいっぱいになっている別の辞書を読み込むことができるコンソールアプリケーションを作っています。私はこのモジュールでDictionaryクラスのすべてのオブジェクトを作成し、 1つのdict_of_はmain.pyに入っています。代わりに、そのような個々のオブジェクトインスタンス化し、それぞれを書き出す:Python辞書オブジェクトインスタンシエーションNameError

animals_dict = Dictionary('animals') 

を私は私のdict_of_dictsをループしたかったし、それらを作成します。今私がこれを行うとき、これらのオブジェクトはまだ定義されていないので、私はNameErrorを取得します。私はそう思っていますが、ここではループを使ってこれらを1つずつ書き出すのではなく、 。

# list of dictionaries loaded into main.py at runtime 

from dict_class import Dictionary 

dict_of_dicts = {'animals':animals_dict, 'nature':nature_dict, 'irregulars':irregulars_dict, 
     'clothes':clothes_dict, 'foodbev':foodbev_dict, 'phrases':phrases_dict, 
      'verbs':verbs_dict,'adjectives':adjectives_dict,'future':future_dict,'past':past_dict, 
      'wotd':wotd_dict} 

for k,v in dict_of_dicts: 
    v = Dictionary(k) #k=self.name 
    print(v) #v=object 

答えて

1

あなたはあなたがそれ以上のループが

my_dicts = {} 
names = ['animals', 'nature', 'irregulars'] 
for name in names: 
    my_dicts[name] = Dictionary(name) 

か理解

my_dicts = {name: Dictionary(name) for name in names} 

として新しい辞書を作成することができます名前['animals', 'nature', 'irregulars'] #etc

のリストを持っていると仮定オブジェクトのほかにまだ存在しない場合は、dict.itemsで辞書の項目をループするときに、その名前に代入を行うことで実際に辞書が変更されないという問題もあります。

for key, value in some_dict.items(): 
    value = 'new' # Bad. Does not modify some_dict 

for key in some_dict: 
    some_dict[key] = 'new' # Good. Does modify some_dict 
0
names = ['animals', 'nature', 'foodbev'] # dict's names 
dict_of_dicts = {} 

for name in names: 
    dict_of_dicts[name] = Dictionary(k) 
+0

また、(dict_of_dicts = {name:名前の名前の辞書(name)) ' – DeepSpace