2012-10-11 2 views
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», что-то вроде "". присоединиться (mynames) ??

спасибо,

/J

+0

Как насчет списка имен mynames, хранящих объекты вместо строк ?, есть ли какие-либо причины для этого? – 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'] 

Ввод в действие Теперь строка string проста, и я уверен, что вы можете взять ее здесь.

+0

Спасибо, отлично работает. Я должен больше сосредоточиться на использовании словарей ... :) – Johannes

+0

словари замечательные. и существует гораздо больше типов структур данных, каждый из которых имеет свои собственные идеальные цели. дикты, однако, являются большой основой. когда речь идет о множестве разных переменных, которые связаны друг с другом - диктовка почти обязательна. и поскольку python не очень заботится о типах, ваш словарь может, конечно, содержать что угодно, даже больше словарей. –

4

Очевидный ответ заключается в использовании глобалам() или местных(), как и в

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

и правильным является

don't do that 

Каждый раз, когда вы пытаетесь манипулировать именами переменных в python, вы делаете неправильную вещь. Используйте соответствующую структуру данных, например dict.

+0

SO должно изменить подсветку синтаксиса для некоторых важных сообщений, таких как 'do not do' – eumiro

+0

Я считаю, что есть способ указать язык подсветки синтаксиса - какой-то фанковый комментарий - но я не могу вспомнить Это. – katrielalex

+1

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

0

eval ваш друг здесь:

",".join([ str(eval(e)) for e in mynames ]) 
Смежные вопросы