Python'da bir sözlükteki anahtar kelime sayısını sayma


234

Ben bir sözlükte kelimelerin bir listesi var = anahtar kelimenin tekrarı ama anahtar kelimelerin sayısını saymak istedim sadece farklı kelimelerin bir listesini istiyorum. Anahtar kelime sayısını saymanın bir yolu var mı veya farklı kelimeler aramam gereken başka bir yol var mı?

Yanıtlar:


410
len(yourdict.keys())

ya da sadece

len(yourdict)

Dosyadaki benzersiz kelimeleri saymak isterseniz, sadece kullanabilirsiniz setve

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

4
Bu yazının eski olduğunu biliyorum, ama merak ediyordum. Bu en hızlı yöntem mi? Veya: öyle bir büyük sözlükler için oldukça hızlı bir yöntem?
theJollySin

2
Hem len(yourdict.keys())ve len(yourdict)O (1) vardır. İkincisi biraz daha hızlı. Aşağıdaki testlerime bakın.
Chih-Hsuan Yen

5
Ben de (soru sormadı biliyorum) ile değerleri için gidebilirsiniz not etmek istiyorumlen(yourdict.values())
ntk4

29

Ayrı sözcüklerin sayısı (örn. Sözlükteki giriş sayısı) len()işlevi kullanılarak bulunabilir .

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

Tüm farklı kelimeleri (anahtarlar gibi) elde etmek için .keys()yöntemi kullanın .

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

5

len()Doğrudan sözlüğünüze çağrı yapmak çalışır ve yineleyici oluşturmaktan d.keys()ve çağırmaktan daha hızlıdır len(), ancak her ikisinin hızı, programınızın yaptığı her şeye kıyasla önemsiz olacaktır.

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

Soru, anahtar kelime sayısını saymakla ilgili ise,

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

ana işlevde veriler arasında dolaşan ve değerleri sayım işlevine geçiren bir şey var

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"

Kod çıktıları

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

2
PEP 8 adlandırma kurallarıcountoccurrences() bunun yerine dikte edilmelidir count_occurrences(). İçe Ayrıca, collections.Counterbunu yapmak için çok daha iyi bir yolu vardır: from collections import Counter; store = Counter(); for data in list: store[list] += 1.
Graham

0

Python3 kanıtı yapmak için UnderWaterKremlin cevabında bazı değişiklikler yapıldı. Aşağıdaki cevap şaşırtıcı bir sonuç.

Sistem özellikleri:

  • python = 3.7.4,
  • conda = 4.8.0
  • 3.6Ghz, 8 çekirdekli, 16gb.
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

Sonuç:

1) = 37.0100378

2) = 37.002148899999995

Yani len(d.keys())şu anda sadece kullanmaktan daha hızlı görünüyor len().

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.