यह वही है जो मैंने किया था। क्या अजगर में एक बेहतर तरीका है?सूची में किसी तत्व की घटना को गिनने के लिए पाइथोनिक तरीका क्या है?
for k in a_list: if kvMap.has_key(k): kvMap[k]=kvMap[k]+1 else: kvMap[k]=1
धन्यवाद
यह वही है जो मैंने किया था। क्या अजगर में एक बेहतर तरीका है?सूची में किसी तत्व की घटना को गिनने के लिए पाइथोनिक तरीका क्या है?
for k in a_list: if kvMap.has_key(k): kvMap[k]=kvMap[k]+1 else: kvMap[k]=1
धन्यवाद
उपयोग defaultdict
from collections import defaultdict
kvmap= defaultdict(int)
for k in a_list:
kvmap[k] += 1
एकल तत्व:
a_list.count(k)
सभी तत्वों:
counts = dict((k, a_list.count(k)) for k in set(a_list))
क्या यह काफी अक्षम नहीं है? आप सूची को एक सेट में परिवर्तित कर रहे हैं, इसे फिर से चालू कर रहे हैं और सेट में प्रत्येक आइटम के लिए गिनती (संभावित रूप से ओ (एन) को कॉल कर रहे हैं। – Dana
आप सही हैं ओ ओ (एन^2), हालांकि मुझे लगता है उस पाइथन प्रकार में इसका मजा –
सूची समझ के बजाए जनरेटर अभिव्यक्ति पर्याप्त है। भी, आंतरिक सूची की बजाय एक टुपल का उपयोग करना अच्छा लगता है, मुझे लगता है। – hop
मुझे पता नहीं, यह मूल रूप से ठीक मेरे लिए लग रहा है। आपका कोड सरल और पढ़ने में आसान है जो कि मुझे पाइथोनिक पर विचार करने का एक महत्वपूर्ण हिस्सा है।)
for k in a_list:
kvMap[k] = 1 + kvMap.get(k,0)
यही वह पोस्ट है जो मैं पोस्ट कर रहा था! – hasen
एक अन्य समाधान SetDefault कारनामे (:
आप इसे एक सा तो जैसे ट्रिम सकता
for k in a_list:
kvMap[k] = kvMap.setdefault(k, 0) + 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}
इस तरह के एक पुराने सवाल है, लेकिन यह देखते हुए कि एक 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})
ओह मैन, मैंने नहीं किया पहले डिफॉल्टडिक्ट के बारे में नहीं सुना। उत्कृष्ट! – Dana
पहली बार जब मैंने डिफॉल्ट डिक्ट का सामना किया तो पीटर नॉरविग के वर्तनी कोर्रेक्टर आलेख में था। कुछ पंक्तियों में, वह शब्दों की एक फाइल में खींचता है और इसे कुंजी = शब्द मूल्य = गिनती के शब्दकोश में परिवर्तित करता है । वे ठंडा। http://www.norvig.com/spell-correct.html – hughdbrown