回答:
len(yourdict.keys())
あるいは単に
len(yourdict)
あなたはファイル内のユニークワードをカウントしたい場合は、あなただけ使用することができますset
し、好きです
len(set(open(yourdictfile).read().split()))
len(yourdict.keys())
とlen(yourdict)
O(1)です。後者は少し高速です。以下の私のテストを参照してください。
len(yourdict.values())
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)
質問がキーワードの数を数えることについてであるなら、次のようなものをお勧めします
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
countoccurrences()
は、そのようにする必要がありますcount_occurrences()
。また、をインポートする場合はcollections.Counter
、はるかに優れた方法がありますfrom collections import Counter; store = Counter(); for data in list: store[list] += 1
。
投稿された回答UnderWaterKremlinにいくつかの変更が加えられ、python3に対応しました。答えとして以下の驚くべき結果。
システム仕様:
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()
。