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() が呼び出された場合、何が起こりますか?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 つの辞書を結合する場合、両方の辞書に同じキーがある場合、どうなりますか?dict_b の値が dict_a の値を上書きするdict_a の値が dict_b の値を上書きする