この記事では、Pythonの辞書を使って単語の出現頻度や持ち物の個数を計算してみます。
目次
辞書の基本的な使い方
ここでさらっと辞書の基本的な使い方をおさらいしてみます。
要素の追加
リンゴの情報を保持する辞書を定義して、そこに国を追加してみます。
apple = {'color':'red','num':12,'birth':1989} #要素の追加 apple['country'] = 'Japan'
get()メソッド
getメソッドを使って、値を取得してみましょう。get(‘キー’,キーがなかった場合に返す値)を指定します。
# getメソッドを使う print(apple.get('num',0)) # 12 print(apple.get('hoge',0)) # 0
リンゴの個数(num)である12が取得できました。’hoge’というキーはないので、0が返ります。
setdefault()メソッド
辞書には、キーが未登録の場合にのみ値を登録するメソッドがあります。
setdefault()メソッド
キーが登録されていなかった場合に値を登録します。
# setdefaultメソッドを使う apple.setdefault('price',100) print(apple)
‘price’というキーがないので辞書に追加されます。
{'color': 'red', 'num': 12, 'birth': 1989, 'country': 'Japan', 'price': 100}
演習問題1
以下のような問題を考えてみます。
問題1.
以下の例文の単語の出現回数を計算してください。
以下の例文の単語の出現回数を計算してください。
message = 'It was a bright cold day in April, and the clocks were striking thirteen.'
[speech_bubble type=”ln-flat” subtype=”L1″ icon=”profile_face.png” name=”のっくん”]さて、どうすれば良いかな〜?[/speech_bubble] [speech_bubble type=”ln-flat” subtype=”R1″ icon=”ilust/cat2_4_think.png” name=”ネコ”]なんかヒントがないと難しいよ〜[/speech_bubble]
では、ここでヒントをお教えします。
ヒント:
- 一単語ずつ取り出す
- 単語が未登録の場合、キーとして辞書に登録する
- キーが出現したら数を増やす
一単語ずつ取り出すのは、for文を使います。
単語が未登録の場合にのみ登録っていうのがポイントです。
答えは以下の通り。
# 単語の出現頻度を数える message = 'It was a bright cold day in April, and the clocks were striking thirteen.' d = {} for c in message: d.setdefault(c,0) d[c] = d[c] + 1 print(d)
実行結果は以下の通り。
{'I': 1, 't': 6, ' ': 13, 'w': 2, 'a': 4, 's': 3, 'b': 1, 'r': 5, 'i': 6, 'g': 2, 'h': 3, 'c': 3, 'o': 2, 'l': 3, 'd': 3, 'y': 1, 'n': 4, 'A': 1, 'p': 1, ',': 1, 'e': 5, 'k': 2, '.': 1}
演習問題2
問題2.
以下の辞書の持ち物の合計を求める関数を作ってください。引数には持ち物名を指定します。
以下の辞書の持ち物の合計を求める関数を作ってください。引数には持ち物名を指定します。
all_guests = { 'アリス':{'リンゴ':5,'プレッツェル':12}, 'ボブ':{'ハムサンド':3,'リンゴ':2}, 'キャロル':{'コップ':3,'アップルパイ':1} }
[speech_bubble type=”ln-flat” subtype=”L1″ icon=”profile_face.png” name=”のっくん”]辞書が二次元になって少し難しくなったね。[/speech_bubble]
ヒントは、get()メソッドを使うです。
答えは以下の通り。
def get_total(guest,item): total=0 for k,v in guest.items(): total = total + v.get(item,0) return total print('リンゴの数は{}です'.format(get_total(all_guests,'リンゴ'))) print('コップの数は{}です'.format(get_total(all_guests,'コップ'))) print('メダカの数は{}です'.format(get_total(all_guests,'メダカ')))