Python: ディクショナリ(辞書)操作のまとめ

Pythonでのディクショナリ(辞書)操作について、 ディクショナリの作成から値の取得、変更、追加など、 各種の操作をまとめています。

ディクショナリ(辞書)作成 {}

ディクショナリを作成する場合は次のように記述します。

書式
ディクショナリ名 = {キー:値, キー:値, キー:値, ...}

キーと値のペアをカンマで区切り、全体は {} 波括弧でくくります。 キーと値の間には : コロンが入ります。

具体的な記述は次の通りです。

d = {"a": 10, "b": 20, "c": 30}

print(d) # {'a': 10, 'b': 20, 'c': 30}

ディクショナリの内容が長くなる場合は、 複数行にわたって書くことができます。
ディクショナリなどのコレクションを複数行で記述する場合は、 行末に \円記号を付ける必要はありません。

d = {"a": 10,
	"b": 20, 
	"c": 30}

print(d) # {'a': 10, 'b': 20, 'c': 30}

空のディクショナリを生成する

空のディクショナリを生成する場合は {} 波括弧だけを記述します。

d = {}

ディクショナリの要素数 len()

Pythonのディクショナリ(辞書)の要素数を取得する場合は len()関数を使います。

書式
len(ディクショナリ)

戻り値はディクショナリの要素数で、 ディクショナリが空の場合は「0」を戻します。

# 要素数 3 のディクショナリ
d = {"a": 10, "b": 20, "c": 30}

print(len(d))  # 3

# 空のディクショナリ
d2 = {}

print(len(d2)) # 0

キーの存在を確認 in演算子

Pythonのディクショナリ内に、キーが存在するかどうかを確認したい場合は、 in演算子を使います。

キー in ディクショナリ

キーが存在する場合は True、 存在しない場合は False が戻ります。

in演算子だけでなく「not in演算子」も使えます。 その場合戻り値は逆になります。

次のコードでは in演算子と if文を使って処理を分岐させています。

d = {"a": 10, "b": 20, "c": 30}

if "c" in d:

	del d["c"]

else:
	#存在しない場合
	print(False)

要素を取得するときに「ディクショナリ[キー]」で取得する場合や、 要素を削除するときに「del ディクショナリ[キー]」で削除する場合は、 存在しないキーを指定するとエラー「KeyError」が発生します。

エラーを防ぐには上で記述したような方法で、 キーの存在を事前に確認する必要があります。

値の存在を確認 in, values()

Pythonのディクショナリ内に、「値」が存在するかどうかを確認したい場合は、 in演算子とディクショナリのvalues()メソッドを使います。

値 in ディクショナリ.values()

値が存在する場合は True、 存在しない場合は False が戻ります。
in演算子だけでなく「not in演算子」も使えます。 その場合戻り値は逆になります。

キーの存在を確認する場合は「キー in ディクショナリ」と記述しますが、 値の場合は「値 in ディクショナリ.values()」と記述します。

次のコードでは in演算子と if文を使って、 値が存在する場合と存在しない場合で処理を分岐させています。

d = {"a": 10, "b": 20, "c": 30}
num = 20

if num in d.values():
	print("存在します")
else: 
	print("存在しません")

関連記事: ディクショナリのすべての値を取得する values()

値を取得 []

Pythonでディクショナリ(辞書)の要素の値を取得する場合は、 リストと同じように []角括弧を使いますが、[] の中にはキーを指定します。

ディクショナリ名[キー]

次のコードでは、キーが「a」の要素値を取得しています。

# ディクショナリ
d = {"a": 10, "b": 20, "c": 30}

# キーが"a"の要素値を取得
print(d["a"])  # 10

存在しないキーを指定するとエラーが出る

「ディクショナリ[キー]」で要素を取得する場合、 存在しないキーを指定すると「KeyError」が発生します。

# ディクショナリ
d = {"a": 10, "b": 20, "c": 30}

print(d["g"])  # エラー
実行結果
Traceback (most recent call last):
  File "test.py", line 6, in 
    print(d["g"]) # 10
KeyError: 'g'

キーが存在するかどうか確認する方法 in

上のようなエラーを防ぐためには、 キーが存在するかどうかを事前に確認する必要があります。

指定するキーがディクショナリに存在するかを確認するには、 in 演算子を使います。

キー in ディクショナリ

キーが存在する場合は True、存在しない場合は False が戻ります。

次のコードは if 文でキーが存在する場合と、存在しない場合を 分岐させています。
このように記述するとキーが存在しない場合でもエラーを防ぐことができます。

# ディクショナリ
d = {"a": 10, "b": 20, "c": 30}

if "g" in d:
	print(True)
	# 存在する場合の処理
else:
	print(False)
	# 存在しない場合の処理

他の方法としてディクショナリの get()メソッドを使って取得することもできます。

値を取得 get()

Pythonでディクショナリ(辞書)の要素の値を取得する場合は、 「ディクショナリ名[キー]」と記述する方法以外にも、 get()メソッドを使う方法があります。 ここではget()を使う方法を紹介します。

書式
ディクショナリ名.get(キー[, 存在しない時の戻り値])

get()メソッドは、キーを指定するとそのキーを持つ要素の値を返します。
「存在しない時の戻り値」のデフォルトは「None」ですが、 自分で指定することもできます。

下のコード例では、 キーが存在する場合と存在しな場合の動作が確認できます。

d = {"a": 10, "b": 20, "c": 30}

print(d.get("a")) # 10

# キーが存在しない場合
print(d.get("g")) # None

# 「存在しない時の戻り値」を指定
print(d.get("g", False))  # False

値を変更 []

Pythonでディクショナリの要素の値を変更する場合は、 変更したい要素のキーを指定して値を代入します。

ディクショナリ名[キー] = 新しい値

次のコードではキーが "a" の要素の値を変更しています。

d = {"a": 10, "b": 20, "c": 30}

# 値を変更
d["a"] = 40

print(d) # {'a': 40, 'b': 20, 'c': 30}

もしキーが存在しなかった場合は、 新しく要素が追加されます。

要素を追加 []

Pythonでディクショナリに要素を新しく追加する場合は、 新しいキーを指定して値を代入します。

ディクショナリ名[新しいキー] = 値

次のコードは「キーが "x"、値が 100」の新しい要素を追加しています。

d = {"a": 10, "b": 20, "c": 30}

# 要素を追加
d["x"] = 100

print(d) # {'a': 10, 'b': 20, 'c': 30, 'x': 100}

既に存在するキーを指定した場合は、 値の「変更」になります。

要素を削除 del

Pythonでディクショナリ(辞書)の要素を削除する場合は、 del文を使用し、削除したい要素のキーを指定します。

del ディクショナリ名[キー]

次のコードはキーが "a" の要素を削除しています。

d = {"a": 10, "b": 20, "c": 30}

# 要素を削除
del d["a"]

print(d) # {'b': 20, 'c': 30}

存在しないキーを指定するとエラーが出る

del文では、存在しないキーを指定するとエラー「KeyError」が発生します。

test.py
d = {"a": 10, "b": 20, "c": 30}

# 要素を削除
del d["x"]
実行結果
Traceback (most recent call last):
  File "test.py", line 7, in 
    del d["x"]
KeyError: 'x'

キーの存在を確認する方法

in 演算子を使って、キーが存在することを確認した後に 削除するとエラーは防げます。

d = {"a": 10, "b": 20, "c": 30}

if "x" in d:
	# 要素を削除
	del d["x"]
else:
	#存在しない場合
	print(False)

全てのキーを取得 keys()

Pythonでディクショナリのすべてのキーを取得する場合は、 keys()メソッドを使います。

ディクショナリ.keys()

戻り値はリストに似たdict_keysオブジェクトです。 戻り値をlistコンストラクタに渡すとリストに変換できます。

次のコードはkeys()メソッドの具体例です。
3つの方法でkeys()メソッドの結果を表示しています。 最初は dict_keysオブジェクトをそのまま表示、 2番目はリストに変換して表示、 3番目は1つずつ表示。

d = {"a": 10, "b": 20, "c": 30}

# dict_keysオブジェクト
print(d.keys()) # dict_keys(['a', 'b', 'c'])

# リストに変換
print(list(d.keys()))  # ['a', 'b', 'c']

# 1つずつ取得
for k in d.keys():
	print(k)
実行結果
dict_keys(['a', 'b', 'c'])
['a', 'b', 'c']
a
b
c

全ての値を取得 values()

Pythonでディクショナリ(辞書)のすべての値を取得する場合は、 values()メソッドを使います。

ディクショナリ.values()

戻り値はリストに似たdict_valuesオブジェクトです。 戻り値をlistコンストラクタに渡すとリストに変換できます。

次のコードはvalues()メソッドの具体例です。
3つの方法でvalues()メソッドの結果を表示しています。 最初は dict_valuesオブジェクトをそのまま表示、 2番目はリストに変換して表示、 3番目は1つずつ表示。

d = {"a": 10, "b": 20, "c": 30}

print(d.values()) # dict_values([10, 20, 30])

# リストに変換
print(list(d.values()))  # [10, 20, 30]

# 1つずつ取得
for v in d.values():
	print(v)
実行結果
dict_values([10, 20, 30])
[10, 20, 30]
10
20
30

値の存在を確認するには

ディクショナリに値が存在するかどうかを調べる場合は、 values()メソッドと in演算子を使って次のように表示できます。

d = {"a": 10, "b": 20, "c": 30}
num = 20

if num in d.values():
	print("存在します")
else: 
	print("存在しません")

全てのキーと値のセットを取得 items()

Pythonでディクショナリ(辞書)のすべてのキーと値のセットを取得する場合は、 items()メソッドを使います。

ディクショナリ.items()

戻り値は dict_itemsオブジェクトで、 キーと値のセットがタプルとして入っています。 戻り値をlistコンストラクタに渡すとリストに変換できます。

次のコードはitems()メソッドの具体例です。
3つの方法でitems()メソッドの結果を表示しています。 最初は dict_itemsオブジェクトをそのまま表示、 2番目はリストに変換して表示、 3番目は1つずつ表示。

d = {"a": 10, "b": 20, "c": 30}

print(d.items()) # dict_items([('a', 10), ('b', 20), ('c', 30)])

# リストに変換
print(list(d.items()))  # [('a', 10), ('b', 20), ('c', 30)]

# 1つずつ取得
for k, v in d.items():
	print(k, v)
実行結果
dict_items([('a', 10), ('b', 20), ('c', 30)])
[('a', 10), ('b', 20), ('c', 30)]
a 10
b 20
c 30