从列表中的字符串创建变量

时间:2019-03-25 13:41:14

标签: python

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”]。

谢谢

2 个答案:

答案 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