『words_dic[word] = words_dic.get(word, 0) + 1』の一文が理解できないです.
カウントアップ部分のコードですね。
次のように書いているのと似たように動作します。
Python
1for word in words:
2 words_dic[word] = words_dic[word] + 1
この書き方なら理解できるでしょうか?
しかし、この方法には一つ問題があります。
まだ辞書のキーとして登録されていない単語が登場した場合、例外を投げて落ちます。
Python
1>>> dct = {}
2>>>
3>>> key = 'spam'
4>>> dct[key] = dct[key] + 1
5Traceback (most recent call last):
6 File "<stdin>", line 1, in <module>
7KeyError: 'spam'
これを回避する為にdict.getを利用しています。
get(key[, default])
key が辞書にあれば key に対する値を、そうでなければ default を返します。 default が与えられなかった場合、デフォルトでは None となります。そのため、このメソッドは KeyError を送出することはありません。
引用元: 組み込み型 — Python 3.8.2 ドキュメント
この場合defaultには0を与えていますから、
- 既に登録されているkeyの場合、そのvalueを返します。
- そうでない場合、0を返します。
カウントアップ処理にはぴったりのメソッドですね。
ともすれば次のように冗長に書いた方が、今は分かり易いかもしれません。
Python
1for word in words:
2 now_cnt = words_dic.get(word, 0) # 現状の個数を獲得 (登録されていない場合は0)
3 new_cnt = now_cnt + 1 # 個数を更新
4 words_dic[word] = new_cnt # 更新した個数を登録
おまけ: カウント処理いろいろ
明示的に分岐する方法
Python
1for word in words:
2 if word in words_dic:
3 words_dic[word] += 1
4 else:
5 words_dic[word] = 1
defaultdictを利用する方法
Python
1import collections
2
3words_dic = collections.defaultdict(int)
4...
5
6for word in words:
7 words_dic[word] += 1
Counterを利用する方法
Python
1import collections
2
3...
4words_dic = collections.Counter(words)