2010-01-22 2 views
0

У меня есть список, list = ['foo','bar'], и теперь я хочу создать строку из каждого элемента.Создать строку из списка (ов) элементов

Каждая строка называется как элемент и имеет значение элемента

Foo = «Foo» бар = «бар»

Спасибо всем, я буду использовать Dict вместо

+7

не использовать 'list' для имени переменной, он затеняет встроенный – SilentGhost

+0

. В чем смысл? Какой более высокий уровень абстракции вы пытаетесь решить? –

ответ

9

Не делайте этого. Вместо этого используйте dict.

strings = dict((x, x) for x in L) 
0

Несмотря на их имена, переменные в Python фактически не должны быть переменными. Если у вас есть данные, которые вы хотите связать с «именем», вы должны использовать Dict вместо:

data = {} 
for s in ['foo', 'bar']: 
    data[s] = s 

Иногда можно изменить местные жители() ввести новые переменные, но так как вы бы (!) не имеют разумного способа ссылаться на них (поскольку вы не знаете их имени при написании кода), в этом нет никакой ценности. Все, что он делает, - это сделать код лот медленнее и намного сложнее понять.

1

Try:

>>> l = ["foo", "bar"] 
>>> for item in l: 
    exec("%s = '%s'" % (item, item)) 

Примечание: Зачем вам это нужно? Вы уверены, что это лучший способ сделать то, что вы хотите сделать? Я спрашиваю, потому что это обычно не такая замечательная идея.

Предупреждение о безопасности: Как указал Аттила Ола, запуск произвольного кода с использованием «exec» - очень плохая идея. Используйте это только в том случае, если вы контролируете строку в списке (и это, например, не вход пользователя).

3

Ignacio Vazquez-Abrams Правильно, используя диктовку лучше. Но если вы настаиваете на их доступными в качестве переменных, вы всегда можете сделать это:

strings = dict((x, x) for x in L) 
locals().update(strings) 

PS: версия Edan Maor «s с exec имеет проблемы с безопасностью. Это не будет обрабатывать ["foo", "';__import__('os').system('rm -rf ~');'"], например :)

+0

Спасибо, обновил мой ответ немного :) –

0

Взгляните на http://docs.python.org/library/functions.html#setattr

Вы должны быть в состоянии сделать что-то вдоль линий

for x in list: 
    setattr(object, x, x) 

Предполагая, что объект является то, что объект, который вы хотели добавьте атрибуты в.

Смежные вопросы