辞書_1(Python_11)

この連載では、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演算子などで事前確認しなければなりません。

次回も辞書

いかがでしょうか。辞書はリスト、タプルとは少し違った特徴がありますね。次回も辞書です。使いどころを考えてみようと思います。お楽しみに!!

hirocom777.hatenadiary.org

Python再学習のまとめはこちら!!