Day 132トップKをheapqで高速に求める
Pythonコード
1import heapq2 3text = 'apple banana apple orange banana banana'4words = text.split()5word_count = {}6for word in words:7 if word in word_count:8 word_count[word] += 19 else:10 word_count[word] = 111 12k = 313try:14 k = int(input('トップ何件表示しますか?'))15except ValueError:16 print('数値を入力してください')17 k = 3 # デフォルト値18 19top_k = heapq.nlargest(k, word_count, key=word_count.get)20print('トップ{}件の単語は'.format(k))21for word in top_k:22 print('{}: {}回'.format(word, word_count[word]))
解説
- 行1〜2: heapqモジュールをインポートします。heapqモジュールは、ヒープデータ構造を提供し、効率的なソートや優先度付きキューの実装を可能にします。
- 行3〜6: テキストデータを準備し、単語のリストとして扱います。split()関数は、文字列を指定された区切り文字で分割し、リストを返します。
- 行7〜10: 単語の出現回数を辞書でカウントします。各単語がすでに辞書にある場合はカウントを増やし、ない場合は新しく追加します。
- 行11〜15: トップK件の単語を表示する回数を設定し、ユーザーから入力を受け付けます。入力が数値でない場合はエラーを表示し、デフォルト値を使用します。
- 行16〜17: heapqモジュールのnlargest関数を使用して、出現回数が多いトップK件の単語を抽出します。key引数に辞書のgetメソッドを指定して、値(出現回数)で比較します。
- 行18〜20: 抽出されたトップK件の単語を表示します。print()関数は、画面に文字や値を表示する関数です。format()関数は、文字列をフォーマットする関数です。
次に試してみよう
- トップK件の単語をアルファベット順に表示してみましょう
- 単語の出現回数をグラフで表示してみましょう
- ユーザーからテキストデータを入力受けて、トップK件の単語を表示してみましょう