2010-12-29 14 views
54

के अनुसार क्रमबद्ध मैं निम्नलिखित कोड है, जो सिर्फ एक dict में कुंजी/मान जोड़े प्रिंट (जोड़े चाबियाँ द्वारा हल कर रहे हैं) है:पुनरावृत्ति कुंजी पर/एक dict में मान जोड़ों कुंजी

for word, count in sorted(count_words(filename).items()): 
    print word, count 

हालांकि, बुला items() के बजाय iteritems() एक ही आउटपुट

अब है, जो एक मैं इस स्थिति में चुनना चाहिए पैदा करता है? मैंने Python tutorial से परामर्श किया लेकिन यह वास्तव में मेरे प्रश्न का उत्तर नहीं देता है।

उत्तर

76

पायथन 2.x दोनों में आपको एक ही परिणाम देगा। उनके बीच का अंतर यह है कि items शब्दकोश की संपूर्ण सामग्री वाली एक सूची बनाता है जबकि iteritems आपको एक पुनरावर्तक देता है जो एक समय में आइटम लेता है। सामान्य रूप से iteritems एक बेहतर विकल्प है क्योंकि इसे बहुत मेमोरी की आवश्यकता नहीं है। लेकिन यहां आप परिणाम को क्रमबद्ध कर रहे हैं, इसलिए शायद इस स्थिति में कोई महत्वपूर्ण अंतर नहीं आएगा। यदि आप संदेह में हैं iteritems एक सुरक्षित शर्त है। यदि प्रदर्शन वास्तव में मायने रखता है तो दोनों को मापें और देखें कि कौन सा तेज़ है।

अजगर 3.x iteritems में हटा दिया गया है और items अब अपने समय में चिंता के बारे में जो बेहतर है बर्बाद कर प्रोग्रामर की समस्या को हल क्या iteritems करते थे करता है,। :)

एक साइड नोट के रूप में: यदि आप शब्दों की घटनाओं की गिनती कर रहे हैं तो आप सादे निर्देश के बजाय collections.Counter का उपयोग करने पर विचार करना चाहेंगे (पाइथन 2.7 या नए की आवश्यकता है)।

+0

+1 वाह! मुझे ऐसा कुछ नहीं पता था। बेहद सुविधाजनक! 3.12 में iteritems बहिष्करण का उल्लेख करने के लिए – helpermethod

+7

+1 –

10

मार्क्स उत्तर के अनुसार: पायथन 2 में, iteritems() का उपयोग करें, पायथन 3 में items() का उपयोग करें।

और इसके अतिरिक्त; यदि आपको दोनों का समर्थन करने की आवश्यकता है (और 2to3 का उपयोग न करें) का उपयोग करें:

counts = count_words(filename) 
for word in sorted(counts): 
    count = counts[word] 
संबंधित मुद्दे