1

我不知道描述我真正要寻找的东西的最佳方式可能这个例子是解释我的问题的最佳方式:

我有以下字符串列表(我的对象名称):

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

4

3 回答 3

4

显而易见的答案是使用 globals() 或 locals()

lst = [globals()[x] for x in 'A', 'B', 'C']

正确的是

 don't do that

每次您尝试在 python 中操作变量名时,您都在做错事。使用适当的数据结构,例如 dict。

于 2012-10-11T08:43:49.677 回答
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']

现在把它们变成一个字符串很简单,我相信你可以从这里得到它。

于 2012-10-11T09:03:33.187 回答
0

eval你的朋友在这里吗:

",".join([ str(eval(e)) for e in mynames ])
于 2012-10-11T08:44:38.697 回答