将字符串转换为变量名称

Har*_*ana 90 python python-2.7

我有任何字符串.像'水牛',

x='buffalo'
Run Code Online (Sandbox Code Playgroud)

我想将此字符串转换为某个变量名称,如

buffalo=4 
Run Code Online (Sandbox Code Playgroud)

不仅这个例子,我想将任何输入字符串转换为某个变量名.我该怎么做(在python中)?

Ste*_*anW 104

x='buffalo'    
exec("%s = %d" % (x,2))
Run Code Online (Sandbox Code Playgroud)

之后你可以通过以下方式检查:

print buffalo
Run Code Online (Sandbox Code Playgroud)

作为输出,您将看到: 2

  • 我刚刚展示了与OP请求完全相同的解决方案. (28认同)
  • 即使在非常罕见的情况下,你有充分的理由动态创建变量,这也不是这样做的方法.只需使用`setattr`.甚至当`setattr`因任何原因不合适时,明确地修改`locals`或`globals`仍然比`exec`更好. (11认同)
  • +1因为它是OP想要的,即使它非常不安全,也不应该被用户使用. (9认同)
  • `exec()`并不危险:危险的是你使用它的方式和环境. (9认同)
  • @BillalBEGUERADJ感谢您为对话添加一些感觉.人们总是盲目地对exec/eval感到害怕,因为他们从来不知道正确使用它有多么强大和有用. (6认同)
  • 从我被告知的一切.当你可以使用更安全的东西(字典)时,永远不要使用exec,它可能很危险. (3认同)
  • 当你打开它接受未知或意外的输入时,问题就出现了;因为 exec/eval 非常强大,代码注入可能会导致脚本严重损坏。想想 https://www.xkcd.com/327,但使用动态脚本。如果(大如果)你确切地知道你的 exec() 会发生什么,我不认为使用它有任何危险。 (2认同)
  • @StefanW如果“值”是其他东西并且是一个复杂的对象怎么办..(例如`buffalo = pd.DataFrame()或{'key':'my dict'}`等,而不是简单的整数`2`。 .) (2认同)

phn*_*sin 24

这是最好的方法,我知道在python中创建动态变量.

my_dict = {}
x = "Buffalo"
my_dict[x] = 4
Run Code Online (Sandbox Code Playgroud)

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

[根据Martijn的建议编辑]

  • 你需要解释更多如何解决OP问题,最重要的是,引用`x`,而不是字符串文字. (5认同)
  • 我不明白这个解决方案。my_dict["Buffalo"] 打印 4 吗?正确的答案应该是 print(Buffalo) 应该是 4,例如 print(x),而不是 print(my_dict["Buffalo"])。 (2认同)

Dea*_*hex 15

您可以使用词典来跟踪键和值.

例如...

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.
Run Code Online (Sandbox Code Playgroud)

字典非常类似于现实生活字典.你有一个词,你有一个定义.你可以查找单词并获得定义.所以在这种情况下,你有"Buffalo"这个词,它的定义是4.它可以与任何其他单词和定义一起使用.只需确保先将它们放入字典中.