Pythonのdict(辞書)の使い方
- 作成日: 2021-05-06
- 更新日: 2023-12-24
- カテゴリ: Python
Pythonのdictの使い方
Pythonには辞書型のデータ構造があります。その名もdictです。
dict
を使うとキーと値を組み合わせてデータを保存することが可能です。
この記事ではPythonのdict
の使い方をわかりやすく解説します。
具体的には↓を見ていきます。
- 辞書とはどういうデータ構造か?
- dictを初期化する
- dictの値を参照する
- dictのアイテムの一覧を得る
- dictのキーの一覧を得る
- dictの値の一覧を得る
- 複数の辞書を結合する
- 辞書内包表記
辞書とはどういうデータ構造か?
辞書とはキーと値を組み合わせたリストです。
キーは辞書の参照に使われます。辞書から何か値を取り出したい時に、キーを参照することで、それと対になっている値を取り出すことができます。
たとえば辞書にcat
というキーがあったとして、このキーに整数20
を紐づけたとします。
この20
という値を辞書から取り出したい時に、cat
というキーを辞書で参照します。そうすると値20
を取り出すことができます。
キーは辞書の中で一意なものです。つまり、重複したキーはマージされます。同じキーで別の値を管理することは出来ません。基本的に1つのキーで管理できる値は1つだけになります(リストやタプルなどは別です)。
辞書はプログラマーの間で非常に人気のあるデータ構造と言えます。
有名なプログラマーであるカーニハンとロブ・パイクは無人島に持って行きたいデータ構造だと例えています。
つまり辞書があれば退屈しないということでしょう。
Pythonではdict
というクラスを使うことで辞書を作成することが可能です。
dict
はdictionary
の略、つまり辞書を指します。
dictを初期化する
Pythonのdict
を初期化したい場合は↓のようにします。
d = {'a': 1, 'b': 2}
print(type(d))
# <class 'dict'>
print(d)
# {'a': 1, 'b': 2}
波カッコ({}
)内が辞書の定義です。変数d
を値の入った波カッコで初期化すると、辞書を作成できます。
波カッコの中はコロン(:
)の左側がキーで、コロンの右側が値です。
このキーと値の組み合わせをアイテムと言います。
アイテムはカンマで区切ると複数登録できます。
つまり↑のコードではa
というキーに1
という値を紐づけて、b
というキーに2
という値を紐づけていることになります。
辞書の波カッコで初期化した変数は<class 'dict'>
というタイプになります。
変数d
はそのままprint()
で出力できて、その中身を見ることができます。
またdict
クラスを使うことでも↓のように初期化できます。
d = dict(a=1, b=2)
print(type(d))
# <class 'dict'>
print(d)
# {'a': 1, 'b': 2}
dict()
のキーワード引数のキー名がそのまま辞書のキーに、値がそのまま辞書の値になります。
その結果は波カッコで辞書を作成した場合と同じになります。
dictの値を参照する
dict
の値を参照するにはキーを使って辞書を参照します。
たとえばa
というキーの値を参照したい場合は↓のようにします。
d = {'a': 1, 'b': 2}
print(d['a'])
# 1
辞書に存在しないキーを参照した場合は例外KeyError
が送出されます。
try:
d['c']
except KeyError as e:
print(e)
# 'c'
辞書内の値を上書きしたい場合は、キーを参照してそのキーの値に対して演算を行います。
d['b'] = 3
print(d)
# {'a': 1, 'b': 3}
dictのアイテムの一覧を得る
辞書のアイテムの一覧を得たい場合は辞書のメソッドitems()
を使います。
items()
はその結果をdict_items
で返します。
d = {'a': 1, 'b': 2}
items = d.items()
print(type(items))
# <class 'dict_items'>
dict_items
はリストやタプルに変換可能です。
リストに変換すると↓のようになります。
l = list(items)
print(l)
# [('a', 1), ('b', 2)]
リスト内のタプルがアイテムに相当し、タプル内の第1要素がキー、第2要素が値になります。
dict_items
はそのままfor
文で回すことができます。
for k, v in d.items():
print(k, v)
# a 1
# b 2
↑の場合、for
文でdict_items()
内のタプルが取り出され、それがk
とv
にアンパックされます。
dictのキーの一覧を得る
辞書のキーの一覧を得たい場合は辞書のkeys()
メソッドを使います。
keys()
はその結果をdict_keys
で返します。
d = {'a': 1, 'b': 2}
keys = d.keys()
print(type(keys))
# <class 'dict_keys'>
dict_keys
はリストやタプルに変換できます。
l = list(keys)
print(l)
# ['a', 'b']
また、dict_keys
はそのままfor
文で回すことができます。
for k in d.keys():
print(k)
# a
# b
dictの値の一覧を得る
辞書の値の一覧を得たい場合は辞書のvalues()
メソッドを使います。
values()
はその結果をdict_values
で返します。
d = {'a': 1, 'b': 2}
values = d.values()
print(type(values))
# <class 'dict_values'>
dict_values
はリストやタプルなどに変換できます。
l = list(values)
print(l)
# [1, 2]
もちろんdict_values
もそのままfor
文で回すことができます。
for v in d.values():
print(v)
# 1
# 2
複数の辞書を結合する
辞書を別の辞書に結合したい場合は辞書のメソッドupdate()
を使います。
更新させたい辞書のupdate()
に結合させたい辞書を渡します。
d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'd': 4}
d2.update(d1)
print(d2)
# {'c': 3, 'd': 4, 'a': 1, 'b': 2}
↑の場合、d2
と言う辞書にd1
という辞書を結合しています。
また、辞書の初期化時に結合させたい辞書をアスタリスク2つ(**
)で参照することでも結合できます。
d1 = {'a': 1, 'b': 2}
d2 = {**d1, 'c': 3, 'd': 4}
print(d2)
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}
辞書内包表記
リスト内包表記などと同じように辞書にも内包表記があります。
↓のようなフォーマットで使います。
{キー: 値 for 要素 in オブジェクト}
文字列のリストを辞書に変換する場合は↓のような感じになります。
d = {s: len(s) for s in ['abc', 'de', 'f']}
print(d)
# {'abc': 3, 'de': 2, 'f': 1}
おわりに
今回はPythonの辞書を見てみました。
Pythonの辞書は色々なシーンで活躍する便利データ構造と言えます。
ぜひとも押さえておきたいところです。
🦝 < 吾輩の辞書に
🐭 < 不可能と言う言葉は
🦊 < けっこうある