【Python】辞書の便利な使い方

 

この記事では、Pythonの辞書を使って単語の出現頻度や持ち物の個数を計算してみます。

 

[toc]

 

辞書の基本的な使い方

 

ここでさらっと辞書の基本的な使い方をおさらいしてみます。

 

要素の追加

 

リンゴの情報を保持する辞書を定義して、そこに国を追加してみます。

 

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]

 

では、ここでヒントをお教えします。

 

ヒント:

  1. 一単語ずつ取り出す
  2. 単語が未登録の場合、キーとして辞書に登録する
  3. キーが出現したら数を増やす

 

一単語ずつ取り出すのは、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,'メダカ')))

 

参考

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog