2012-04-30 20 views
8

Bir jeneratör (PEP-289) kullanarak sözlükleri oluşturabilir: Aynı dict bazı ekstra anahtar-değer çiftleri eklemek içinBir jeneratör argümanıyla oluşturulmuş bir dict() öğesine ek anahtar/değer çiftleri nasıl eklenir?

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

o sözdizimsel mümkün mü() diyoruz? Başka bir deyişle

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

, çağrı) (tek dict aşağıdaki inşa etmek mümkündür: Aşağıdaki sözdizimi yanlış ama iyidir sorumu açıklıyor

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

cevap

16

Oluşturucu:

dict(iterableOfKeyValuePairs, **dictOfKeyValuePairs) 

Örnek:

>>> 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'} 

(sen tek olmasa bile argüman jeneratör ifadelerini parenthesize gerekecektir unutmayın.)

+1

+1 kapsamlı, henüz kısa. Aferin. –

+1

+1, İşte * arg ** kwargs arkadaşlarımıza tekrar geliyor – Boud

+0

Bu kadar! Çok teşekkürler! – tnajdek

0

Sen itertools.chain kullanabilirsiniz (bkz Concatenate generator and item) dict() numaralı aramaya fazladan bir şeyler eklemek için.

dict numaralı telefonu arayın ve sonra ekstra öğeleri açıkça ekleyin.

1
dict([(h,h*2) for h in range(5)] + [(h,h2) for h,h2 in {'foo':'bar'}.items()]) 
İlgili konular