अजगर में एक शब्दकोश में कीवर्ड की संख्या की गिनती


234

मेरे पास शब्दकोष में शब्दों की एक सूची है, जिसमें मूल्य = कीवर्ड की पुनरावृत्ति है लेकिन मैं केवल अलग-अलग शब्दों की एक सूची चाहता हूं इसलिए मैं कीवर्ड की संख्या गिनना चाहता था। क्या खोजशब्दों की संख्या की गणना करने का एक तरीका है या क्या कोई दूसरा तरीका है जिसे मुझे अलग-अलग शब्दों के लिए देखना चाहिए?

जवाबों:


410
len(yourdict.keys())

या केवल

len(yourdict)

यदि आप फ़ाइल में अनूठे शब्दों को गिनना पसंद करते हैं, तो आप बस उपयोग setऔर पसंद कर सकते हैं

len(set(open(yourdictfile).read().split()))

4
मुझे पता है कि यह पोस्ट पुरानी है, लेकिन मैं उत्सुक था। क्या यह सबसे तेज़ विधि है? या: यह बड़े शब्दकोशों के लिए एक उचित तेज़ विधि है?
TheJollySin

2
दोनों len(yourdict.keys())और len(yourdict)कर रहे हैं हे (1)। उत्तरार्द्ध थोड़ा तेज है। मेरे परीक्षण नीचे देखें।
चिह-हसन येन

5
मैं ध्यान देना चाहता हूं कि आप मूल्यों के लिए भी जा सकते हैं (मुझे पता है कि सवाल यह नहीं पूछा था)len(yourdict.values())
ntk4

29

len()फ़ंक्शन का उपयोग करके विभिन्न शब्दों की संख्या (शब्दकोष में प्रविष्टियों की गणना) पाई जा सकती है ।

> a = {'foo':42, 'bar':69}
> len(a)
2

सभी अलग-अलग शब्दों (अर्थात चाबियाँ) को प्राप्त करने के लिए, .keys()विधि का उपयोग करें ।

> list(a.keys())
['foo', 'bar']

5

len()अपने शब्दकोश में सीधे कॉल करना काम करता है, और इट्रेटर के निर्माण की तुलना में तेज़ है d.keys(), और len()उस पर कॉल करना, लेकिन जो भी आपका कार्यक्रम कर रहा है उसकी तुलना में या तो गति नगण्य होगी।

d = {x: x**2 for x in range(1000)}

len(d)
# 1000

len(d.keys())
# 1000

%timeit len(d)
# 41.9 ns ± 0.244 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

%timeit len(d.keys())
# 83.3 ns ± 0.41 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

2

यदि सवाल कीवर्ड की संख्या गिनने के बारे में है तो कुछ इस तरह की सिफारिश करेगा

def countoccurrences(store, value):
    try:
        store[value] = store[value] + 1
    except KeyError as e:
        store[value] = 1
    return

मुख्य फ़ंक्शन में कुछ ऐसा होता है जो डेटा से गुजरता है और फ़ंक्शन की गणना के लिए मानों को पास करता है

if __name__ == "__main__":
    store = {}
    list = ('a', 'a', 'b', 'c', 'c')
    for data in list:
        countoccurrences(store, data)
    for k, v in store.iteritems():
        print "Key " + k + " has occurred "  + str(v) + " times"

कोड आउटपुट

Key a has occurred 2 times
Key c has occurred 2 times
Key b has occurred 1 times

2
पीईपी 8 नामकरण सम्मेलनों को निर्धारित करता है जो countoccurrences()इसके बजाय होना चाहिए count_occurrences()। इसके अलावा, यदि आप आयात करते हैं collections.Counter, तो इसे करने का एक बेहतर तरीका है from collections import Counter; store = Counter(); for data in list: store[list] += 1:।
ग्राहम

0

कुछ संशोधनों को पोस्टवेटरकेरमलीन पर पोस्ट किया गया था ताकि इसे python3 सबूत बनाया जा सके। उत्तर के रूप में नीचे एक आश्चर्यजनक परिणाम।

सिस्टम चश्मा:

  • अजगर = 3.7.4,
  • कोंडा = 4.8.0
  • 3.6Ghz, 8 कोर, 16 जीबी।
import timeit

d = {x: x**2 for x in range(1000)}
#print (d)
print (len(d))
# 1000

print (len(d.keys()))
# 1000

print (timeit.timeit('len({x: x**2 for x in range(1000)})', number=100000))        # 1

print (timeit.timeit('len({x: x**2 for x in range(1000)}.keys())', number=100000)) # 2

परिणाम:

1) = 37.0100378

2) = 37.002148899999995

तो ऐसा लगता है कि len(d.keys())वर्तमान में केवल उपयोग करने की तुलना में तेज़ है len()

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.