Pythonにも辞書(連想配列とも呼ばれ、キーと値のセットで構成されるもの)があり、要素を特定するときに「キー」を指定して値を取得することができます。
キーと値
辞書オブジェクトは、「キー(識別子)」と「値」という要素から成り立っていて、辞書の要素はこの組み合わせで管理されます。
キーには数値、文字列を使うことができます。
# キーが数値の辞書 dict_key_num = {10:"りんご", 20:"桃", 100:"メロン"} # キーが文字列の辞書 dict_key_str = {"apple":"りんご", "peach":"桃", "melon":"メロン"} print(dict_key_num[20]) print(dict_key_str["melon"])
こちらのコードを実行すると、下記のような出力になります
桃 メロン
上の「桃」が、dict_key_num(キーが数値の辞書)で、キーが 20 のオブジェクトの値(桃)を表示しており、下の「メロン」は、dict_key_str(キーが文字列の辞書)で、キーが”melon”のオブジェクトの値(メロン)を表示しています。
もし、辞書内に該当するキーのオブジェクトが存在しない場合は、エラー「KeyError: ‘<指定したキー>‘(キーエラー:指定したキーに該当するものが存在しない)」となります。
辞書オブジェクトの生成
辞書オブジェクトは、波括弧'{‘と’}’で作成します。
‘{‘と’}’の間には、キーと値を’:'(コロン)を使って「キー:値」という形式で指定して、要素は’,'(カンマ)で区切ります。
要素のない空の辞書を作成することもできます。
# 空の辞書 dict_example = {} print(dict_example)
このコードを実行すると下記のように出力されます。
{}
辞書の操作
要素の追加と書き換え
辞書オブジェクトの要素の追加は、「辞書オブジェクト[キー] = 値」と書くことで可能です。
# 空の辞書 dict_example = {} #辞書へ要素を追加 dict_example["hoge"] = "ほげほげ" print(dict_example)
最初、dict_exampleの要素は空ですが、要素を追加したため、実行したときの出力は下記のようになります。
{'hoge': 'ほげほげ'}
要素の書き換え(値の変更)も記述方法は同じです。
# 空の辞書 dict_example = {} #辞書へ要素を追加 dict_example["hoge"] = "ほげほげ" #要素の値の書き換え dict_example["hoge"] = "ほげって何?" print(dict_example)
辞書 dict_example へ要素を追加したときの値が「”ほげほげ”」で、この dict_example[“hoge”] の値を書き換えているので、最終的な出力は下記のようになります。
{'hoge': 'ほげって何?'}
要素の削除
辞書オブジェクトの要素の削除は、del 文を使用します。
# 空の辞書 dict_example = {} #辞書へ要素を追加 dict_example["hoge"] = "ほげほげ" #要素の値の書き換え dict_example["hoge"] = "ほげって何?" #辞書へ要素をさらに追加 dict_example["hoge2"] = "ほげらっちょ" #要素を削除 del dict_example["hoge"] print(dict_example)
{'hoge2': 'ほげらっちょ'}
この del文ですが、コードを書き間違えると、ぜんぜん違うものを削除してしまうので注意してください。
上記のコードで、もし del dict_example (キーを指定し忘れている)とすると、ここではエラーにはならずに「dict_exampleという辞書そのものを削除する」というコードとなり、普通に実行されてしまいます。
今回のサンプルでは del dict_example として実行してしまった場合は、この直後のprint(dict_example) で「NameError: name ‘dict_example’ is not defined」となります。
これは、「dict_example という名前のオブジェクトは定義されていません」というエラーメッセージで、エラーが発生した行では「dict_example は存在していない」となってしまいます。
これは、さきほどの del dict_example が、dict_example という辞書オブジェクトそのものを削除してしまったからです。
辞書の要素数を求める
辞書オブジェクトの要素数は、リストオブジェクトと同じように len()関数で求めることができます。
# 空の辞書 dict_example = {} #辞書へ要素を追加 dict_example["hoge"] = "ほげほげ" #要素の値の書き換え dict_example["hoge"] = "ほげって何?" #現在の要素数を確認する print("要素数を確認: ", len(dict_example)) #辞書へ要素をさらに追加 dict_example["hoge2"] = "ほげらっちょ" #現在の要素数を確認する print("要素数を確認: ", len(dict_example)) print(dict_example)
一連の動作の中に要素数を出力する処理を追加しています。
こちらのコードを実行すると下記のように出力されます。
要素数を確認: 1 要素数を確認: 2 {'hoge': 'ほげって何?', 'hoge2': 'ほげらっちょ'}
最初の要素数を取得して出力した時点で、要素数は1個ですが、2回目の出力時に要素数は2個になっています。
in 演算子
辞書オブジェクトを扱ううえで、想定したキーが辞書オブジェクト内に存在するかを知る必要があります。
そういうときには、in 演算子を使うと、辞書オブジェクトに指定したキーの要素が存在しているかを知ることができます。
# 空の辞書 dict_example = {} #辞書へ要素を追加 dict_example["hoge"] = "ほげほげ" #要素の値の書き換え dict_example["hoge"] = "ほげって何?" #辞書へ要素をさらに追加 dict_example["hoge2"] = "ほげらっちょ" print("キー'hoge'はありますか") # キーに該当する要素の有無チェック print("hoge" in dict_example) print("キー'hoge3'はありますか") # キーに該当する要素の有無チェック print("hoge3" in dict_example)
このコードを実行すると、下記のように出力されます。
キー'hoge'はありますか True キー'hoge3'はありますか False
辞書 dict_example には”hoge”の定義はされていますが、”hoge3″は定義されていません(“hoge”以外で定義されているのは”hoge2″です)
実際のコードでは、if 文で辞書内のキーの有無判定を行うときに使用します。
# 空の辞書 dict_example = {} #辞書へ要素を追加 dict_example["hoge"] = "ほげほげ" #要素の値の書き換え dict_example["hoge"] = "ほげって何?" #辞書へ要素をさらに追加 dict_example["hoge2"] = "ほげらっちょ" print("キー'hoge'はありますか") # キーに該当する要素の有無チェック if("hoge" in dict_example): #辞書内にキー"hoge"がある場合 print("あります") else: #辞書内にキー"hoge"がなかった場合 print("ありません") print("キー'hoge3'はありますか") # キーに該当する要素の有無チェック if("hoge3" in dict_example): #辞書内にキー"hoge3"がある場合 print("あります") else: #辞書内にキー"hoge3"がなかった場合 print("ありません")
if(“hoge” in dict_example): の行でキーの有無判定の結果で処理を分岐させています。
このコードを実行させた結果は下記のようになります。
キー'hoge'はありますか あります キー'hoge3'はありますか ありません