2012-04-30 13 views
8

一つは、発電機(PEP-289)を使用して辞書を作成することができます。ジェネレータ引数で構築されたdict()に追加のキーと値のペアを追加するには?

dict((h,h*2) for h in range(5)) 
#{0: 0, 1: 2, 2: 4, 3: 6, 4: 8} 

は同じdictの()の呼び出しでいくつかの余分なキーと値のペアを追加することが文法的に可能ですか?次の構文が間違っていますが、より良い私の質問について説明します。つまり

dict((h,h*2) for h in range(5), {'foo':'bar'}) 
#SyntaxError: Generator expression must be parenthesized if not sole argument 

を、単一のdict()の呼び出しで次のように構築することが可能です:

{0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 'foo': 'bar' } 

答えて

16

コンストラクタ:

dict(iterableOfKeyValuePairs, **dictOfKeyValuePairs) 

例:

>>> dict(((h,h*2) for h in range(5)), foo='foo', **{'bar':'bar'}) 
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 'foo': 'foo', 'bar': 'bar'} 

(あなたがいない場合は唯一の引数ジェネレータ式を括弧する必要があることに注意してください。)

+1

+1、包括的なまだ簡単。よくやった。 –

+1

+1、ここで私たちの* arg ** kwargsの友人が来る – Boud

+0

それです!どうもありがとう! – tnajdek

0

あなたが見(itertools.chainを使用することができますConcatenate generator and itemdict()へのお電話に余分なものを追加してください。

dictを1回呼び出して、明示的に余分な項目を追加するのは簡単な方法です。

1
dict([(h,h*2) for h in range(5)] + [(h,h2) for h,h2 in {'foo':'bar'}.items()]) 
関連する問題