Pythonの辞書(dictionary)の使い方:値の取得、追加、削除、検索、ソートをざっくり解説
Python の辞書は中カッコに「ペア」をカンマ区切りで並べたものです。
d = {'太郎': 43, '次郎': 51, '三郎': 82, '花子': 76}
'太郎': 43 が一つのペアです。ペアは「キー:値」という形で、必ずコロンでつなぎます。
d = {'apple': 7, 'lemon': 11}
e = {'x': 1, 'y': 2, 'z': 3}
f = {'山田': '太郎', '佐藤': '花子'}
print(type(d)) # <class 'dict'>
print(type(e)) # <class 'dict'>
print(type(f)) # <class 'dict'>
type は変数などの型を表示する関数です。辞書は dict と表示されます。
Python で辞書の値を取得する
辞書にキーを入れると、そのキーに対応した値が出ます。
d = {'apple': 7, 'lemon': 11}
x = d['apple']
print(x) # 7
他の例:
e = {'x': 1, 'y': 2, 'z': 3}
print(e['x']) # 1
print(e['y']) # 2
print(e['z']) # 3
もしキーがなかったらどうなるでしょうか?
f = {'山田': '太郎', '佐藤': '花子'}
x = f['五郎丸']
# KeyError: '五郎丸'
f は山田と佐藤のキーを持っていますが、五郎丸というキーはありません。そこで Python は「キーがないよ!」というエラーを出します。
Python の辞書にペアを追加する
辞書にペアを追加するときは下のようにします。
d = {'Apple': 263, 'Facebook': 197}
d['Google'] = 1315
print(d)
# {'Apple': 263, 'Facebook': 197, 'Google': 1315}
Google の 1315 が追加されました。もし「すでに存在するキー」を入れたらどうなるでしょうか?
d = {'Apple': 263, 'Facebook': 197}
d['Apple'] = 'iPhone'
print(d)
# {'Apple': 'iPhone', 'Facebook': 197}
Apple の値が変更されました。つまりこの方法は「追加」と「上書き」を兼ねているのです。ちなみに上の数字は直近の株価(ドル)です。
Python の辞書からペアを削除する
辞書からペアを削除するときは pop という関数を使います。
d = {'Apple': 263, 'Facebook': 197}
d.pop('Apple')
print(d)
# {'Facebook': 197}
キーを指定してペアを削除します。もしキーがなかったらエラーになります。
d = {'Apple': 263, 'Facebook': 197}
d.pop('Microsoft')
# KeyError: 'Microsoft'
「d は Microsoft というキーがない」というエラーが表示されます。
Python の辞書にキーがあるか検索する
辞書に「キーがあるかないか」という検索(確認)は in で行います。
d = {'Apple': 263, 'Facebook': 197}
x = 'Apple' in d
y = 'Amazon' in d
print(x) # True
print(y) # False
Apple は d にあるため x は True になります。しかし Amazon は d にないので y は False になります。
Python の辞書をソートする(並び替える)
辞書をキーで並び替えるときは sorted を使います。
d = {'b': -1, 'a': 4, 'c': 2}
x = sorted(d.items())
y = sorted(d.items(), reverse=True)
print(x) # [('a', 4), ('b', -1), ('c', 2)]
print(y) # [('c', 2), ('b', -1), ('a', 4)]
b, a, c が a, b, c の順になりました。オプションをつけないと昇順、reverse=True をつけると降順になります。結果はリストで、辞書ではありません。またリストの各要素はタプルになっています。
print(type(x)) # <class 'list'>
print(type(x[0])) # <class 'tuple'>
辞書を値で並び替えるときも sorted を使いますが、中でラムダ式を使うため少し複雑です。
d = {'b': -1, 'a': 4, 'c': 2}
x = sorted(d.items(), key=lambda i: i[1])
y = sorted(d.items(), key=lambda i: i[1], reverse=True)
print(x) # [('b', -1), ('c', 2), ('a', 4)]
print(y) # [('a', 4), ('c', 2), ('b', -1)]
print(type(x)) # <class 'list'>
print(type(x[0])) # <class 'tuple'>
sorted の key にラムダ式を入れます。初めて Python を勉強する方は、一種のおまじないだと考えてください。-1, 4, 2 がソートされて -1, 2, 4 になりました。reverse=True で降順になるのは同じです。