2016-05-04 7 views
3

私は一つの値が別の値から構築された辞書を作りたいと思います。dict作成中に別のものからPython dict値を作成する方法は?

私は

d = { 
    'a':1, 
    'b':self['a']+1 
} 

を書いて思ったが、期待どおりに動作しませんでした:

>>> {'a':1, 'b':self['a']+1} 
Traceback (most recent call last): 
    File "<stdin>", line 1, in ? 
NameError: name 'self' is not defined 

だから、どのように私はPythonのトリックを達成することができますか? (私はPython 2.4を使用しています)

+0

'' a ''をどのような値に設定しているかが分かっているなら、すでに '' b ''を設定する必要があります。 –

+0

@WayneWerner:しかし、 'a'の値を作成する式は高価になる可能性があります。その計算を2回行わないでください。 –

+0

'self'はキーワードではなく、どこにでも特別な意味を持ちません。インスタンスメソッドの最初の引数に与えられた従来の名前です。 – chepner

答えて

5

まだ作成されていない辞書は参照できません。ただ、後辞書を作成、追加のキーを割り当てる:あなたは2つのだけの値を持っている場合は、

a_value = 1 
d = {'a': a_value, 'b': a_value + 1} 
2

はまた、別の変数最初に値を設定し

、その後、辞書を作成最初に1を計算し、次にbを別の行として追加します。

依存関係がより複雑な場合は、値を提供する関数を使用する価値があります。以前の等価

mydict = {key: value for (key, value) in iterable} 

次のようになります:

mydict = dict((key, value) for (key, value) in iterable) 

今、あなたが値を生成するための反復可能な機能を提供します。

def get_dictionary_values(): 
    a = get_really_expensive_calculation() 
    yield ('a', a) 
    b = a + modification_value 
    yield ('b', b) 
    # Add all other values here that calculate from earlier values. 

mydict = dict((key, value) for (key, value) in get_dictionary_values()) 

して以降

のPython 2.7は、辞書の理解を持っています必要に応じて関数内のループのオプション

関連する問題