在Python中将字符串转换为变量名

164

我有任何字符串,比如“buffalo”,

x='buffalo'

我想将这个字符串转换为像变量名称一样的形式,例如:

buffalo=4 

不仅仅是这个例子,我想将任何输入字符串转换为一些变量名。我应该如何实现(用Python)?


29
为什么你想这样做?一般情况下,如果你需要将字符串映射到值,你会使用字典。 - Martijn Pieters
到目前为止,没有一个答案处理常见的错误情况,例如字符串中有空格或句号。 - CivFan
3个回答

182
x='buffalo'    
exec("%s = %d" % (x,2))

之后,您可以通过以下方式进行检查:

print buffalo

作为输出,你将看到:2


27
即使在极少数情况下您确实有动态创建变量的充分理由,这也不是做法;只需使用 setattr。即使对于任何原因不适合使用 setattr,明确地修改适当的 localsglobals 仍然比使用 exec 更好。 - abarnert
51
我刚展示了一个与原帖要求完全相同的解决方案。 - StefanW
15
虽然这很不安全,而且不应该被使用,但由于用户的要求,我会进行+1操作。 - Nacib Neme
21
exec() 并不危险:危险的是你如何以及在什么上下文中使用它。 - Billal Begueradj
10
感谢 @BillalBEGUERADJ 给这次对话带来了一些理性。人们总是盲目地对 exec/eval 表现出恐慌,而他们从未理解在正确使用时它们可以有多么强大和有用。 - Dss
显示剩余4条评论

45

这是我所知道的在Python中创建动态变量的最佳方法。

my_dict = {}
x = "Buffalo"
my_dict[x] = 4

我在这里找到了一个类似但不完全相同的问题 从用户输入创建动态命名变量


7
请详细说明这是如何解决问题,最重要的是,请引用 x 而不是字符串文字。 - Martijn Pieters
2
我不理解这个解决方案。my_dict["Buffalo"]会打印出4吗?正确的答案应该是print(Buffalo)应该是4,就像print(x)一样,而不是print(my_dict["Buffalo"])。 - Joonho Park
我在另一个脚本中使用过这个。奇怪的是,my_dict[x] = my_dic[x] + n可以工作,而my_dict[x] += n却不能工作。为什么会这样? - Joonho Park

24
你可以使用字典来跟踪键和值。
例如...
dictOfStuff = {} ##Make a Dictionary

x = "Buffalo" ##OR it can equal the input of something, up to you.

dictOfStuff[x] = 4 ##Get the dict spot that has the same key ("name") as what X is equal to. In this case "Buffalo". and set it to 4. Or you can set it to  what ever you like

print(dictOfStuff[x]) ##print out the value of the spot in the dict that same key ("name") as the dictionary.

字典与现实生活中的字典非常相似。你有一个单词和一个定义。你可以查找这个单词并获得定义。所以在这种情况下,你有一个单词“水牛”,它的定义是4。它可以适用于任何其他单词和定义。只需确保首先将它们放入字典中即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接