2010-10-06 14 views
93

मैं a = [1,2,3,4] है और मैं d = {1:0, 2:0, 3:0, 4:0}मैं एक सूची और कुंजी से डिफ़ॉल्ट (कहें) शून्य से कुंजी के साथ एक शब्दकोश कैसे बना सकता हूं?

d = dict(zip(q,[0 for x in range(0,len(q))])) 

काम करता है चाहते हैं, लेकिन बदसूरत है। एक क्लीनर तरीका क्या है?

उत्तर

153

dict((el,0) for el in a) अच्छी तरह से काम करेगा।

पायथन 2.7 और ऊपर भी श्रोताओं की समझ का समर्थन करते हैं। वह वाक्यविन्यास {el:0 for el in a} है।

+1

जेनरेटर भाव पूरी सूची आबाद करने का स्मृति भूमि के ऊपर से बचें। –

+14

आपको शायद उस टिप्पणी को अपने वास्तविक उत्तर में बढ़ावा देना चाहिए। इसके अलावा, पायथन 2.7 और पायथन 3 से आप '{el: 0 el में a के लिए' कर सकते हैं। (इसे अपने उत्तर में भी जोड़ने के लिए स्वतंत्र महसूस करें।) – Zooba

2
d = dict([(x,0) for x in a]) 

** संपादित करें टिम का समाधान बेहतर है क्योंकि यह जेनरेटर का उपयोग उनके उत्तर पर टिप्पणी देखता है।

6

टिम जवाब है, जो अपने विशिष्ट उदाहरण के लिए बहुत उपयुक्त है के अलावा, यह आप इस तरह चीजें करते हैं जो की सुविधा देता है उल्लेख collections.defaultdict लायक है,: अपने उदाहरण के रूप में

>>> d = defaultdict(int) 
>>> d[0] += 1 
>>> d 
{0: 1} 
>>> d[4] += 1 
>>> d 
{0: 1, 4: 1} 

मानचित्रण [1, 2, 3, 4] के लिए यह एक मछली है पानी से बाहर। लेकिन इस सवाल के आधार पर कि आपने सवाल पूछा है, यह एक और अधिक उपयुक्त तकनीक होने का अंत हो सकता है।

86
d = dict.fromkeys(a, 0) 

a, सूची है 0 डिफ़ॉल्ट मान है। कुछ म्यूटेबल ऑब्जेक्ट (यानी सूची या निर्देश) में डिफ़ॉल्ट मान सेट न करने के लिए ध्यान दें, क्योंकि यह एक वस्तु होगी जो शब्दकोश में प्रत्येक कुंजी के लिए मूल्य के रूप में उपयोग की जाएगी (इस मामले के समाधान के लिए here देखें)। संख्या/तार सुरक्षित हैं।

+11

एकमात्र पायथनिक तरीका है। – SilentGhost

+1

यह क्लीनर प्रतीत होता है (मेरे लिए कम से कम), यह टिम की तुलना कैसे करता है? – blahster

+1

टिम का समाधान किसी भी डिफ़ॉल्ट मान के लिए काम करता है (आप एक खाली सूची या डेटाटाइम ऑब्जेक्ट या कुछ भी के साथ शब्दकोश को प्रारंभ कर सकते हैं)। मेरे समाधान में, आप इसे केवल अपरिवर्तनीय वस्तुओं (int/float, string, ...) के साथ प्रारंभ कर सकते हैं। यह आपके मामले के लिए अधिक पाइथोनिक है (डिफ़ॉल्ट मान 0 है) और शायद यह भी तेज़ है। – eumiro

7

अजगर संस्करण> = 2.7 और अजगर 3 में में:

d = {el:0 for el in a} 
संबंधित मुद्दे