Python 辞書

Python において、辞書(dictionary)は、順序付けられた(Python > 3.7 以降)key: value ペアのコレクションです。

Python 3 の ドキュメントより

辞書に対する主な操作は、あるキーに関連付けられた値を格納することと、キーが与えられたときにその値を取り出すことです。また、del を使ってキー:値のペアを削除することも可能です。

辞書の例:

# 辞書:キーと値のペアのコレクション
my_cat = {
    'size': 'fat',          # key: 'size', value: 'fat'
    'color': 'gray',         # key: 'color', value: 'gray'
    'disposition': 'loud'    # key: 'disposition', value: 'loud'
}

サブスクリプト演算子 [] を使用したキーと値の設定

# サブスクリプト演算子を使用して辞書のエントリを追加または更新
my_cat = {
 'size': 'fat',
 'color': 'gray',
 'disposition': 'loud',
}
my_cat['age_years'] = 2  # 新しいキーと値のペアを追加
print(my_cat)
{'size': 'fat', 'color': 'gray', 'disposition': 'loud', 'age_years': 2}

サブスクリプト演算子 [] を使用した値の取得

キーが辞書内に存在しない場合、KeyError が発生します。

my_cat = {
 'size': 'fat',
 'color': 'gray',
 'disposition': 'loud',
}
print(my_cat['size'])
fat
print(my_cat['eye_color'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'eye_color'

values()

values() メソッドは、辞書のを取得します。

# .values() メソッドを使用して辞書の値のイテレーション
pet = {'color': 'red', 'age': 42}
for value in pet.values():  # すべての値に対してループ
    print(value)
red
42

keys()

keys() メソッドは、辞書のキーを取得します。

# .keys() メソッドを使用して辞書のキーのイテレーション
pet = {'color': 'red', 'age': 42}
for key in pet.keys():  # すべてのキーに対してループ
    print(key)
color
age

デフォルトではキーをループするため、.keys() を使用する必要はありません。

# 辞書を直接イテレートするとキーがループされる (デフォルトの動作)
pet = {'color': 'red', 'age': 42}
for key in pet:  # for key in pet.keys() と同等
    print(key)
color
age

items()

items() メソッドは、辞書のアイテムを取得し、それらを タプル として返します。

pet = {'color': 'red', 'age': 42}
for item in pet.items():
    print(item)
('color', 'red')
('age', 42)

keys(), values(), および items() メソッドを使用すると、for ループでそれぞれキー、値、またはキーと値のペアを辞書内でイテレートできます。

# .items() メソッドを使用してキーと値のペアのイテレーション
pet = {'color': 'red', 'age': 42}
for key, value in pet.items():  # タプルを key と value にアンパック
    print(f'Key: {key} Value: {value}')
Key: color Value: red
Key: age Value: 42

get()

get() メソッドは、指定されたキーを持つアイテムの値を返します。キーが存在しない場合は、None を返します。

# .get() メソッド:値を安全に取得し、キーが存在しない場合は None を返す
wife = {'name': 'Rose', 'age': 33}

f'My wife name is {wife.get("name")}'  # 'Rose' を返す
'My wife name is Rose'
f'She is {wife.get("age")} years old.'
'She is 33 years old.'
f'She is deeply in love with {wife.get("husband")}'
'She is deeply in love with None'

デフォルトの None 値を任意のデフォルト値に変更することもできます。

wife = {'name': 'Rose', 'age': 33}

f'She is deeply in love with {wife.get("husband", "lover")}'
'She is deeply in love with lover'

setdefault() を使用したアイテムの追加

次のような方法で辞書にアイテムを追加できます。

wife = {'name': 'Rose', 'age': 33}
if 'has_hair' not in wife:
    wife['has_hair'] = True

setdefault メソッドを使用すると、同じコードをより短く記述できます。

wife = {'name': 'Rose', 'age': 33}
wife.setdefault('has_hair', True)
wife
{'name': 'Rose', 'age': 33, 'has_hair': True}

アイテムの削除

pop()

pop() メソッドは、指定されたキーに基づいてアイテムを削除し、その値を返します。

wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
wife.pop('age')
33
wife
{'name': 'Rose', 'hair': 'brown'}
クイズ

ログインしてこのクイズに回答し、学習の進捗を追跡できます

辞書に対して pop() が呼び出された場合、何が起こりますか?
A. キーと値のペアのみが削除される
B. 指定されたキーの値が削除され、その値が返される
C. 値が返されるだけで、削除はされない
D. 辞書内のすべてのアイテムが削除される

popitem()

popitem() メソッドは、辞書内の最後のアイテムを削除し、それを返します。

wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
wife.popitem()
('hair', 'brown')
wife
{'name': 'Rose', 'age': 33}

del

del メソッドは、指定されたキーに基づいてアイテムを削除します。

wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
del wife['age']
wife
{'name': 'Rose', 'hair': 'brown'}

clear()

clear() メソッドは、辞書内のすべてのアイテムを削除します。

wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
wife.clear()
wife
{}

辞書内のキーの確認

person = {'name': 'Rose', 'age': 33}

'name' in person.keys()
True
'height' in person.keys()
False
'skin' in person # keys() を省略可能
False

辞書内の値の確認

person = {'name': 'Rose', 'age': 33}

'Rose' in person.values()
True
33 in person.values()
True

整形して表示 (Pretty Printing)

import pprint

wife = {'name': 'Rose', 'age': 33, 'has_hair': True, 'hair_color': 'brown', 'height': 1.6, 'eye_color': 'brown'}
pprint.pprint(wife)
{'age': 33,
 'eye_color': 'brown',
 'hair_color': 'brown',
 'has_hair': True,
 'height': 1.6,
 'name': 'Rose'}

2 つの辞書の結合

Python 3.5 以降の場合:

dict_a = {'a': 1, 'b': 2}
dict_b = {'b': 3, 'c': 4}
dict_c = {**dict_b, **dict_a}
dict_c
{'a': 1, 'b': 3, 'c': 4}
クイズ

ログインしてこのクイズに回答し、学習の進捗を追跡できます

{**dict_b, **dict_a} を使用して 2 つの辞書を結合する場合、両方の辞書に同じキーがある場合、どうなりますか?
A. dict_b の値が dict_a の値を上書きする
B. dict_a の値が dict_b の値を上書きする
C. 両方の値がリストに保持される
D. エラーが発生する

関連リンク