2017-10-24 8 views
0

Ich mache eine Konsolenanwendung, die verschiedene Wörterbücher geladen mit spanischen Wörtern und Definitionen laden kann, denke ich hier, dass ich alle Objekte meiner Dictionary-Klasse in diesem Modul machen und dann über importieren möchten ein dict_of_dicts in main.py. Anstatt jede Instanziierung jedes einzelne Objekt des Schreibens aus etwa so:Python Wörterbuch Objekt Instanziierung NameError

animals_dict = Dictionary('animals') 

wollte ich Schleife durch meine dict_of_dicts und sie erstellen. Wenn ich das mache, bekomme ich einen NameError, weil diese Objekte noch nicht definiert sind, was wohl Sinn macht, aber ich frage mich, ob es hier eine Arbeit gibt, diese Objekte durch eine Schleife zu machen, anstatt sie nur einzeln zu schreiben .

# 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 

Antwort

1

Angenommen, Sie haben eine Liste von Namen ['animals', 'nature', 'irregulars'] #etc

Sie können die Schleife über ein neues Wörterbuch erstellen

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

Oder als Verständnis

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

Neben dem Objekt noch nicht vorhanden, das andere Problem, dem Sie begegnen würden, ist, dass beim Durchlaufen der Elemente eines Wörterbuchs durch dict.items, eine Zuweisung für diesen Namen das Wörterbuch nicht tatsächlich ändern wird.

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

Oder (angenommen Python 2.6 +), 'dict_of_dicts = {name: Wörterbuch (name) für name in names}' – DeepSpace