Pythonで辞書のキーワードの数を数える


234

辞書に単語のリストがあり、値=キーワードの繰り返しですが、明確な単語のリストしか必要ないため、キーワードの数を数えたいと考えています。キーワードの数を数える方法はありますか、それとも別の単語を探す必要がある別の方法はありますか?

回答:


410
len(yourdict.keys())

あるいは単に

len(yourdict)

あなたはファイル内のユニークワードをカウントしたい場合は、あなただけ使用することができますsetし、好きです

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

4
この投稿が古いことは知っていますが、興味がありました。これは最速の方法ですか?または:大規模な辞書の場合それかなり高速な方法ですか?
theJollySin 2013年

2
両方len(yourdict.keys())len(yourdict)O(1)です。後者は少し高速です。以下の私のテストを参照してください。
Chih-Hsuan円

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

メイン関数には、データをループして値を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"

コード出力

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

2
PEP 8の命名規則countoccurrences()は、そのようにする必要がありますcount_occurrences()。また、をインポートする場合はcollections.Counter、はるかに優れた方法がありますfrom collections import Counter; store = Counter(); for data in list: store[list] += 1
グラハム、

0

投稿された回答UnderWaterKremlinにいくつかの変更が加えられ、python3に対応しました。答えとして以下の驚くべき結果。

システム仕様:

  • python = 3.7.4、
  • コンダ= 4.8.0
  • 3.6 GHz、8コア、16 GB。
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()

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.