web-dev-qa-db-ja.com

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

値がキーワードの繰り返しである辞書に単語のリストがありますが、私はキーワードの数を数えたいと思ったので私は異なる単語のリストが欲しいだけです。キーワードの数を数える方法はありますか、または別の方法で別の単語を探すべきですか?

191
Dan
len(yourdict.keys())

あるいは単に

len(yourdict)

ファイル内のユニークな単語を数えたい場合は、 set を使用するだけでいいです。

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

個別の単語の数(つまり辞書のエントリ数)はlen()関数を使って見つけることができます。

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

すべての異なる単語(つまりキー)を取得するには、.keys()メソッドを使用します。

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

質問がキーワードの数を数えることに関するものであるならば、それからそのような何かを推薦するでしょう

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

メイン関数にデータをループしてcountoccurrences関数に値を渡すものがあります。

if __== "__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
1
David

辞書で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)
0