Warning: Trying to access array offset on value of type bool in /home/cycos/cammy.co.jp/public_html/technical/wp-content/themes/cocoon-master/lib/utils.php on line 2604

Warning: Trying to access array offset on value of type bool in /home/cycos/cammy.co.jp/public_html/technical/wp-content/themes/cocoon-master/lib/utils.php on line 2604

Warning: Trying to access array offset on value of type bool in /home/cycos/cammy.co.jp/public_html/technical/wp-content/themes/cocoon-master/lib/utils.php on line 2632
スポンサーリンク
Python

Pythonの辞書オブジェクト

スポンサーリンク
スポンサーリンク

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)

 

del dict_example[“hoge”] の行で、辞書 dict_example にある、キー”hoge”の要素を削除しています。実行した結果は以下のようになります。
{'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'はありますか
ありません

 

タイトルとURLをコピーしました