Python字典对象实例化NameError

时间:2017-10-24 16:29:34

标签: python object dictionary nameerror

我正在创建一个控制台应用程序,可以加载充满西班牙语单词和定义的不同词典,我的想法是我想在这个模块中创建我的Dictionary类的所有对象,然后通过一个dict_of_dicts将它们导入main。 PY。而不是写出每个实例化每个单独的对象,如下:

animals_dict = Dictionary('animals') 

我想遍历我的dict_of_dicts并创建它们。现在,当我这样做时,我得到一个NameError,因为这些对象尚未定义,我认为这是有道理的,但我想知道是否有一个解决方法是通过循环制作这些对象而不是一个接一个地写出来。

# 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

2 个答案:

答案 0 :(得分:1)

假设您有一个名称列表['animals', 'nature', 'irregulars'] #etc

您可以循环覆盖它以创建新词典

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

或者作为理解

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

除了尚未存在的对象之外,您将遇到的另一个问题是,当通过dict.items循环遍历字典的项目时,对该名称进行分配将不会实际修改字典。 / p>

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

答案 1 :(得分:0)

names = ['animals', 'nature', 'foodbev']  # dict's names
dict_of_dicts = {}

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