2012-10-11 16 views
1

我不知道最好的方式來描述我所真正需要的 也許這個例子是最好的解釋我的問題:創建Python字符串從對象的值

我有一個字符串以下列表(我對象名稱):

mynames = ["A","B","C"] 

我的對象本身被定義爲:

A = "Hello" 
B = 12 
C = "This is C" 

現在我想創建一個逗號分隔字符串對象的所有值在「mynames」像提到 :

​​ 當然

我可以做手工,如:

",".join([A,str(B),C]) 

但有一種方式來創建基於列表「mynames」的結果,像「」 加入(mynames)?

感謝,

/J

+0

mynames list如何存儲對象而不是字符串?是否有任何理由呢? – Netwave

+0

不要這樣做。相反,將'mynames'設爲字典。 – katrielalex

回答

2

在其他的答案中提到,您可以使用eval,文字-EVAL,全局,當地人,或其他這樣的廢話來完成你的任務 - 但你的做法是錯誤的。

正如我認爲在其他答案中提到的,您最好使用不同的數據結構,也許是一本字典。例如,在你的榜樣:

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'] 

使它們變爲on e字符串現在很簡單,並且我確定你可以從這裏取得它。

+0

謝謝,當然完美。我必須更多地關注字典的使用...... :) – Johannes

+0

字典很棒。還有更多類型的數據結構,每種都有自己的理想用途。然而,口授是一個偉大的骨幹。當處理所有相關的許多不同變量時,字典幾乎是必須的。由於python並不太在意類型,所以你的字典當然可以包含任何東西,甚至更多的字典。 –

4

顯而易見的答案是使用全局變量()或當地人()在

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

和正確的一項

don't do that 

每次你試圖在python中操作變量名時,你都會做錯誤的事情。使用適當的數據結構,如字典。

+0

SO應該改變一些重要信息的語法突出顯示,比如'不這樣做' – eumiro

+0

我相信有一種方法可以指示語法突出顯示的語言 - 某種時髦的評論 - 但我不記得了它。 – katrielalex

+1

@katrielalex:[<! - language:none - >](http://meta.stackoverflow.com/editing-help/#syntax-highlighting) – unutbu

0

eval是你的朋友在這裏:

",".join([ str(eval(e)) for e in mynames ])