この連載では、Pythonについて色々な形で再学習に取り組んでいます。前回の記事はこちらになります。 hirocom777.hatenadiary.org 前回は、集合の使い道について学びました。集合を使えばデータの処理方法が広がります。
今回は、辞書について学んでいきたいと思います。
辞書
辞書とは、Pythonが標準でサポートしているオブジェクトの1つです。ただし、今までご紹介したオブジェクト(リスト、タプル、集合)とは、ちょっと毛色が違います。辞書とは、キーで管理するデータの集合です。以下のように記述します。
{キー1:値1, キー2:値2, …}
キーには数値や文字列、タプルなどイミュータブルなデータ型で指定します。値には任意のデータ型のオブジェクトをセットできます。
辞書はシーケンス
辞書はシーケンスなオブジェクトです。個々の値を参照するには、キーを使って指定します。また、辞書はミュータブルなオブジェクトです。キーで指定した値を修正できます。
d_1 = {'A':1,'B':2,'C':3} print(d_1['B']) # 2を返す d_1['C'] = 5 print(d_1) # {'A': 1, 'B': 2, 'C': 5}を返す
逆に値を使ってキーを指定することはできません。
キーには重複して指定してはいけません。重複して指定をした場合、参照できない値が発生します。また、存在しないキーを指定するとエラーになります。
d_1 = {'A':1,'A':2,'C':3} print(d_1['A']) # 2を返す(1は参照できない) print(d_1['D']) # エラーとなる
辞書はイテラブル
また、辞書はイテラブルなオブジェクトです。for文を使ってキーを順番に取り出せます。(d_1をd_1.keys()としても同じです。)
d_1 = {'A':1,'B':2,'C':3,'D':4} for key in d_1: print(key, end=' ') # A B C D と表示する
for文を使って値を順番に取り出すには、valuesメソッドを使用します。
d_1 = {'A':1,'B':2,'C':3,'D':4} for val in d_1.values(): print(val, end=' ') # 1 2 3 4 と表示する
また、キーと値の両方を順番に取り出すには、itemsメソッドを使用します。
d_1 = {'A':1,'B':2,'C':3,'D':4} for key,val in d_1.items(): print(key, end=':') print(val, end=' ') # A:1 B:2 C:3 D:4 と表示する
なお、Python3.7以降では辞書内のキーの順番が保証されるようになりました。
キーの有無の確認
キーの有無の確認は、in演算子、not in演算子を使います。
print('A' in {'A':1,'B':2,'C':3} ) # Trueを返す print('D' in {'A':1,'B':2,'C':3} ) # Falseを返す print('A' not in {'A':1,'B':2,'C':3} ) # Falseを返す print('D' not in {'A':1,'B':2,'C':3} ) # Trueを返す
要素の追加
キーを使って辞書の値を修正できることは、すでに述べました。この時辞書の中に存在しないキーを使用すると、該当するキーと値を辞書に追加できます。
d_1 = {'A':1,'B':2,'C':3} d_1['D'] = 5 print(d_1) # {'A': 1, 'B': 2, 'C': 3, 'D': 5}を返す
逆に言うと辞書にデータを追加する場合、辞書内にキーが存在していないことを、not in演算子などで事前確認しなければなりません。間違って存在するキーを指定すると、該当する値を上書きしてしまいます。
また、updateメソッドを使うと別の辞書の内容を追加できます。
d_1 = {'A': 1, 'B': 2} d_1.update({'C': 3, 'D': 4}) print(d_1) # {'A': 1, 'B': 2, 'C': 3, 'D': 4}を返す
この場合も追加する辞書に重複するキーがあると、追加する辞書の値に書き換えられてしまいます。 また、累算代入演算子「|=」も使用可能です(Python3.9以降)。
d_1 = {'A': 1, 'B': 2} d_1 |= {'C': 3, 'D': 4} print(d_1) # {'A': 1, 'B': 2, 'C': 3, 'D': 4}を返す
要素の削除
辞書の要素を削除するには、del文を使って削除する要素のキーを指定します。
d_1 = {'A':1,'B':2,'C':3} del d_1['B'] print(d_1) # {'A': 1, 'C': 3}を返す
また、popメソッドを使って削除する要素のキーを指定すると、対象の値を返すと同時に要素を削除します。
d_1 = {'A':1,'B':2,'C':3} print(d_1.pop('B')) # 2を返す print(d_1) # {'A': 1, 'C': 3}を返す
要素を削除する際に、辞書内に指定したキーが存在していないとエラーとなります。実行前にin演算子などで事前確認しなければなりません。
次回も辞書
いかがでしょうか。辞書はリスト、タプルとは少し違った特徴がありますね。次回も辞書です。使いどころを考えてみようと思います。お楽しみに!!