2009-01-09 7 views

उत्तर

14

उपयोग defaultdict

from collections import defaultdict 
kvmap= defaultdict(int) 
for k in a_list: 
    kvmap[k] += 1 
+0

ओह मैन, मैंने नहीं किया पहले डिफॉल्टडिक्ट के बारे में नहीं सुना। उत्कृष्ट! – Dana

+0

पहली बार जब मैंने डिफॉल्ट डिक्ट का सामना किया तो पीटर नॉरविग के वर्तनी कोर्रेक्टर आलेख में था। कुछ पंक्तियों में, वह शब्दों की एक फाइल में खींचता है और इसे कुंजी = शब्द मूल्य = गिनती के शब्दकोश में परिवर्तित करता है । वे ठंडा। http://www.norvig.com/spell-correct.html – hughdbrown

9

एकल तत्व:

a_list.count(k) 

सभी तत्वों:

counts = dict((k, a_list.count(k)) for k in set(a_list)) 
+0

क्या यह काफी अक्षम नहीं है? आप सूची को एक सेट में परिवर्तित कर रहे हैं, इसे फिर से चालू कर रहे हैं और सेट में प्रत्येक आइटम के लिए गिनती (संभावित रूप से ओ (एन) को कॉल कर रहे हैं। – Dana

+0

आप सही हैं ओ ओ (एन^2), हालांकि मुझे लगता है उस पाइथन प्रकार में इसका मजा –

+0

सूची समझ के बजाए जनरेटर अभिव्यक्ति पर्याप्त है। भी, आंतरिक सूची की बजाय एक टुपल का उपयोग करना अच्छा लगता है, मुझे लगता है। – hop

7

मुझे पता नहीं, यह मूल रूप से ठीक मेरे लिए लग रहा है। आपका कोड सरल और पढ़ने में आसान है जो कि मुझे पाइथोनिक पर विचार करने का एक महत्वपूर्ण हिस्सा है।)

for k in a_list: 
    kvMap[k] = 1 + kvMap.get(k,0) 
+0

यही वह पोस्ट है जो मैं पोस्ट कर रहा था! – hasen

3

एक अन्य समाधान SetDefault कारनामे (:

आप इसे एक सा तो जैसे ट्रिम सकता

for k in a_list: 
    kvMap[k] = kvMap.setdefault(k, 0) + 1 
1

अपनी सूची सॉर्ट हो जाता है, तो एक वैकल्पिक तरीका itertools.groupby का उपयोग करना होगा। यह सबसे प्रभावी तरीका नहीं हो सकता है, लेकिन फिर भी यह दिलचस्प है। यह आइटम की एक dict retuns> गिनती:

>>> import itertools 
>>> l = [1,1,2,3,4,4,4,5,5,6,6,6,7] 
>>> dict([(key, len([e for e in group])) 
      for (key, group) 
      in itertools.groupby(l)]) 
{1: 2, 2: 1, 3: 1, 4: 3, 5: 2, 6: 3, 7: 1} 
+0

बाहरी सूची समझ है आवश्यक नहीं; जनरेटर अभिव्यक्ति पर्याप्त है। – hop

+0

dict ((कुंजी, लेन (सूची (समूह))) (कुंजी, समूह) itertools.groupby (एल) में) – nosklo

4

इस तरह के एक पुराने सवाल है, लेकिन यह देखते हुए कि एक defaultdict(int) को जोड़ने इस तरह के एक आम उपयोग है, यह (के बाद से कोई आश्चर्य की बात है कि collections कि के लिए एक विशेष नाम है के रूप में आना चाहिए पायथन 2.7)

>>> from collections import Counter 
>>> Counter([1, 2, 1, 1, 3, 2, 3, 4]) 
Counter({1: 3, 2: 2, 3: 2, 4: 1}) 
>>> Counter("banana") 
Counter({'a': 3, 'n': 2, 'b': 1}) 
संबंधित मुद्दे

 संबंधित मुद्दे