Menghitung Jumlah kata kunci dalam kamus dengan python

234

Saya memiliki daftar kata dalam kamus dengan nilai = pengulangan kata kunci tetapi saya hanya ingin daftar kata-kata yang berbeda sehingga saya ingin menghitung jumlah kata kunci. Apakah ada cara untuk menghitung jumlah kata kunci atau adakah cara lain untuk mencari kata yang berbeda?

Dan
sumber

Jawaban:

410
len(yourdict.keys())

atau hanya

len(yourdict)

Jika Anda suka menghitung kata-kata unik dalam file, Anda bisa menggunakan setdan suka saja

len(set(open(yourdictfile).read().split()))
KAMU
sumber
4
Saya tahu posting ini sudah tua, tetapi saya ingin tahu. Apakah ini metode tercepat? Atau: apakah ini metode yang cukup cepat untuk kamus besar?
theJollySin
2
Keduanya len(yourdict.keys())dan len(yourdict)O (1). Yang terakhir ini sedikit lebih cepat. Lihat tes saya di bawah ini.
Chih-Hsuan Yen
5
Saya ingin mencatat bahwa Anda juga dapat menggunakan nilainya (Saya tahu pertanyaannya tidak menanyakannya) denganlen(yourdict.values())
ntk4
29

Jumlah kata yang berbeda (yaitu jumlah entri dalam kamus) dapat ditemukan menggunakan len()fungsi.

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

Untuk mendapatkan semua kata yang berbeda (yaitu kunci), gunakan .keys()metode ini.

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

Memanggil len()langsung pada kamus Anda berfungsi, dan lebih cepat daripada membangun iterator,, d.keys()dan memanggilnya len(), tetapi kecepatan keduanya akan diabaikan dibandingkan dengan apa pun yang sedang dilakukan program Anda.

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)
UnderwaterKremlin
sumber
2

Jika pertanyaannya adalah tentang menghitung jumlah kata kunci maka akan merekomendasikan sesuatu seperti

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

dalam fungsi utama memiliki sesuatu yang loop melalui data dan meneruskan nilai ke fungsi countoccurrences

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"

Keluaran kode

Key a has occurred 2 times
Key c has occurred 2 times
Key b has occurred 1 times
David
sumber
2
Konvensi penamaan PEP 8 mendikte yang countoccurrences()seharusnya count_occurrences(). Juga, jika Anda mengimpor collections.Counter, ada banyak cara yang lebih baik untuk melakukannya: from collections import Counter; store = Counter(); for data in list: store[list] += 1.
Graham
0

Beberapa modifikasi dibuat pada jawaban yang diposting UnderWaterKremlin untuk membuatnya menjadi bukti python3. Hasil mengejutkan di bawah ini sebagai jawaban.

Spesifikasi sistem:

  • python = 3.7.4,
  • conda = 4.8.0
  • 3.6Ghz, 8 inti, 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

Hasil:

1) = 37.0100378

2) = 37.002148899999995

Jadi sepertinya len(d.keys())saat ini lebih cepat daripada hanya menggunakan len().

ZF007
sumber