2012-04-30 47 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((h,h*2) for h in range(5), {'foo':'bar'}) 
#SyntaxError: Generator expression must be parenthesized if not sole argument 

換句話說,是否有可能建立一個單一的字典以下()調用:

{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 item)將您的額外資料添加到dict()的電話中。

儘管這樣做很簡單,但可以更簡單:一次調用dict,然後明確添加額外的項目。

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