2012-04-30 10 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 item) dict() पर अपनी कॉल में अपनी अतिरिक्त सामग्री जोड़ने के लिए।

यह संभवतः आसान तरीका करने के लिए स्पष्ट है, हालांकि: dict पर एक कॉल और फिर स्पष्ट रूप से अतिरिक्त आइटम जोड़ें।

1
dict([(h,h*2) for h in range(5)] + [(h,h2) for h,h2 in {'foo':'bar'}.items()]) 
संबंधित मुद्दे