2012-01-11 11 views
0

eval機能に問題があります。私は等号を含む文字列を評価するには?

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

、例えば、のようなリストを持っていると私は、最初の要素をタプルの各値を代入したいと思います:

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

私はこれをどのように行うことができますか?

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

をしかしない:

答えて

11

あなたはこれを行うことができます。本当に、しないでください。動的ローカル変数は必要ありません。辞書が必要です。

my_dict = dict(list1) 
+0

+1 [Pythonでevalを使用するのは悪い習慣ですか?](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 

ここではローカル変数の束縛とのdictを返しvars()。唯一のインスタンス(コピーではない)へのポインタを返すので、その場所で修正することができます(.update)。

+0

これは本当ですが、彼の質問に答えても、あなたは本当にそれをすべきではありません。それらのための新しい辞書を作成する方がよいでしょう。 – Shawabawa

+1

[vars() 'ドキュメント](https://docs.python.org/2/library/functions.html#vars)によると:"引数なしでは、 'vars()'は 'locals() '。ローカル辞書は、ローカル辞書への更新が無視されるので、読み込みにのみ役立つことに注意してください。 – martineau

関連する問題