82

辞書のエントリを変数に変換するために、辞書の値をキーに割り当てる Pythonic の方法はありますか? 私はこれを試しました:

>>> d = {'a':1, 'b':2}
>>> for key,val in d.items():
        exec('exec(key)=val')
            
        exec(key)=val
                 ^ 
        SyntaxError: invalid syntax

キーと値のペアは、以前に変数として定義されていたため、正しいと確信しています。次に、これらの変数を (キーと値のペアとして) 辞書に格納し、別の関数で再利用したいと考えています。新しい関数でそれらをもう一度定義することもできますが、約 20 エントリの辞書がある可能性があるため、これを行うにはもっと効率的な方法があるのではないかと考えました。

4

7 に答える 7

142

次のように 1 行で実行できます。

>>> d = {'a': 1, 'b': 2}
>>> locals().update(d)
>>> a
1

ただし、このトリックを使用する場合、Python がローカル/グローバル アクセスを最適化する方法に注意する必要があります。

ノート

そのような編集locals()は一般的に悪い考えだと思います。globals()より良い代替案だと思う場合は、よく考えてください。:-D

代わりに、常に名前空間を使用したいと思います。

Python 3 では次のことができます。

>>> from types import SimpleNamespace    
>>> d = {'a': 1, 'b': 2}
>>> n = SimpleNamespace(**d)
>>> n.a
1

Python 2 に行き詰まっている場合、または にない機能を使用する必要がある場合はtypes.SimpleNamespace、次のこともできます。

>>> from argparse import Namespace    
>>> d = {'a': 1, 'b': 2}
>>> n = Namespace(**d)
>>> n.a
1

データを変更する予定がない場合はcollections.namedtuple、Python 3 でも利用できる の使用を検討することもできます。

于 2016-03-17T11:24:49.713 に答える
54

これは私が探していたものでした:

>>> d = {'a':1, 'b':2}
>>> for key,val in d.items():
        exec(key + '=val')
于 2013-09-05T23:46:30.867 に答える
31

あなたはすでに完全に優れた辞書を持っています。それを使うだけです。キーがどうなるかを知っていて、これが合理的なアイデアであると絶対に確信している場合は、次のようなことができます

a, b = d['a'], d['b']

しかし、ほとんどの場合、辞書だけを使用する必要があります。(辞書を使用するのが面倒な場合は、おそらくデータがうまく整理されていない可能性があります。再整理するために助けを求めてください。)

于 2013-08-06T21:30:42.767 に答える
1

パンダを使う:

import pandas as pd
var=pd.Series({'a':1, 'b':2})
#update both keys and variables
var.a=3
print(var.a,var['a'])
于 2015-02-11T21:03:07.427 に答える