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?

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()))

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']

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)

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

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().

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.