我不知道描述我真正想要的东西的最佳方式 可能这个例子最适合解释我的问题:
我有以下字符串列表(我的对象名称):
mynames = ["A","B","C"]
我的对象本身被定义为:
A = "Hello"
B = 12
C = "This is C"
现在,我想创建一个逗号分隔的字符串,其中包含所有对象的值 在“mynames”中如:
myresult = "Hallo,12,This is C"
当然我可以像以下一样手动完成:
",".join([A,str(B),C])
但有没有办法根据列表“mynames”创建结果,例如“,”。join(mynames)??
感谢,
/ J
答案 0 :(得分:4)
显而易见的答案是使用
中的globals()或locals()lst = [globals()[x] for x in 'A', 'B', 'C']
正确的是
don't do that
每次尝试在python中操作变量名时,你都会做错事。使用适当的数据结构,如dict。
答案 1 :(得分:2)
如其他答案所述,你可以使用eval,literal-eval,globals,locals或其他类似的废话来完成你的任务 - 但你的方法是错误的。
正如我认为在其他答案中提到的,你最好使用不同的数据结构,也许是字典。例如,在你的例子中:
A = "Hello"
B = 12
C = "This is C"
可以通过以下方式完成:
my_dict = {}
my_dict["A"] = "Hello"
my_dict["B"] = 12
my_dict["C"] = "This is C"
然后你可以这样做:
mynames = ["A","B","C"]
print [my_dict[key] for key in mynames]
在控制台上,这是结果:
>>> my_dict = {}
>>> my_dict["A"] = "Hello"
>>> my_dict["B"] = 12
>>> my_dict["C"] = "This is C"
>>> mynames = ["A","B","C"]
>>> print [my_dict[key] for key in mynames]
['Hello', 12, 'This is C']
将它们组合成一个字符串现在很简单,我相信你可以从这里开始。
答案 2 :(得分:0)
eval
是你的朋友:
",".join([ str(eval(e)) for e in mynames ])