Python的新功能。我想创建新变量,其名称取自列表中的字符串。 (我环顾四周,有几个名字相似的问题,但看起来他们好像在尝试做不同的事情。)
这是一个简化的示例,以显示我要执行的操作:
mylist = ["a", "b", "c", "d"]
for item in mylist:
item = input("What do you want " + str(item) + " to be defined as?")
如果我运行它并输入我想要创建的每个变量,那么...
What do you want a to be defined as?"apple"
What do you want b to be defined as?"bob"
What do you want c to be defined as?"cat"
What do you want d to be defined as?"dog"
我正在尝试做等同于定义
a = "apple"
b = "bob"
c = "cat"
d = "dog"
但是,当我检查它是否有效时,我得到了:
NameError: name 'a' is not defined
请帮助!
(或者,如果我可以重命名一个已经定义好的变量X,并且具有从列表中拉出的名称,那么我也可以做我想做的事情。这只是创建一个变量名从列表中的一个字符串遮住我。)
另外,请注意:我不是要更改mylist中的条目(即,将其更改为mylist = [“ apple”,“ bob”,“ cat”,“ dog”])。我只是想从我的列表中提取名称,以用作在其他地方做其他事情的变量。我希望我的列表仅保留[“ a”,“ b”,“ c”,“ d”]。
谢谢
答案 0 :(得分:0)
我建议使用dict
而不是列表,以便dict将表示变量名及其关联值之间的映射:
variables = ['a', 'b', 'c']
mapping = {v: None for v in variables}
for variable in variables:
mapping[variable] = input(...)
无论如何,如果您确实需要动态创建新变量,则仍然可以依靠exec
:
var = 'a'
value = 'apple'
# Similar to a = 'apple'
exec('{} = "{}"'.format(var, value))
执行完这些行之后,您可以检查a
是否已定义并具有正确的值:
assert a == 'apple'
顺便说一句,一般来说,依靠exec
并不是一个好主意(尤其是如果您无法控制向input
提供的内容!)。
答案 1 :(得分:0)
您可以使用字典:
mylist = ["a", "b", "c", "d"]
mydict = {}
for item in mylist:
mydict[item] = input("What do you want " + str(item) + " to be defined as?")
有关字典的更多信息,您可以在这里阅读:https://docs.python.org/3.7/tutorial/datastructures.html#dictionaries