2012-01-11 3 views
0

У меня есть некоторые проблемы с функцией eval. У меня есть список, как, например,Как оценить строку, содержащую символ равенства?

list1 = [('a',1), ('b',2), ('c',3)] 

, и я хотел бы, чтобы присвоить значение каждого кортежа первого элемента:

for el in list1 : 
    eval(el[0]) = el[1] 

Как я могу это сделать?

ответ

11

Вы могли это сделать:

exec('%s = %s' % el) 

Но этого не делают. Действительно, не надо. Вам не нужно динамических локальных переменных, вам нужен словарь:

my_dict = dict(list1) 
+0

+1 [Использует eval В Python Плохая практика?] (Http://stackoverflow.com/questions/1832940/is-using-eval-in-python-a-bad-practice) – gecco

+1

'eval' works только на выражениях. Это потребует 'exec'. Тем не менее, он не должен этого делать: P –

+0

@ RicardoCárdenes вы правы, спасибо - исправлено. –

2

Вам не нужно eval для этого.

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

>>> list1 = [("a", 4), ("b", 8)] 
>>> vars().update(dict(list1)) 
>>> a 
4 
>>> b 
8 

Здесь vars() возвращает Dict с местными привязками переменных. Поскольку он возвращает указатель на единственный экземпляр (а не копию), вы можете изменить его на месте (.update).

+0

Хотя это верно и отвечает на его вопрос, вы действительно не должны этого делать. Лучше всего просто создать для них новый словарь. – Shawabawa

+1

Согласно документации '' vars() '(https://docs.python.org/2/library/functions.html#vars):« Без аргумента 'vars()' действует как 'locals() 'Примечание. Словарь locals полезен только для чтения, так как обновления в словаре locals игнорируются." – martineau

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