在 python 中,您不能在运行时创建局部变量。您必须明确地为它们分配一个值。
像这样的东西:
locals()['lloyd'] = {...}
locals()['alice'] = {...}
locals()['tyler'] = {...}
不创建局部变量,并且:_lloyd
alice
tyler
>>> def some_function():
... locals()['lloyd'] = {}
... print lloyd
...
>>> some_function()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in some_function
NameError: global name 'lloyd' is not defined
从文档中引用locals()
:
注意不得修改本词典的内容;更改可能不会影响解释器使用的局部变量和自由变量的值。
您可以做的是在运行时创建全局变量,使用globals()
. 虽然我不明白你为什么要这样做。
但是,您可以使用该copy
模块来避免重复dict
定义:
import copy
base_dict = {"homework": [], "quizzes": [], "tests": []}
lloyd = copy.deepcopy(base_dict)
alice = copy.deepcopy(base_dict)
tyler = copy.deepcopy(base_dict)
for the_dict, name in ((lloyd, "lloyd"), (alice, "alice"), (tyler, "tyler")):
the_dict["name"] = name.capitalize()
或者没有循环:
import copy
base_dict = {"homework": [], "quizzes": [], "tests": []}
lloyd = copy.deepcopy(base_dict)
alice = copy.deepcopy(base_dict)
tyler = copy.deepcopy(base_dict)
lloyd["name"], alice["name"], tyler["name"] = "lloyd", "alice", "tyler"
取决于你想做什么使用 adefaultdict
可能是一个好主意:
from collections import defaultdict
lloyd = defaultdict(list)
alice = defaultdict(list)
tyler = defaultdict(list)
lloyd["name"], alice["name"], tyler["name"] = "lloyd", "alice", "tyler"
,而不是在找不到键时defaultdict
引发 a ,而是创建一个默认值(在本例中为空)并将该值设置为键的值,因此您无需指定.KeyError
list
"tests": []