Pythonのdict(辞書)の使い方

244, 2021-05-07

目次

Pythonのdictの使い方

Pythonには辞書型のデータ構造があります。その名もdictです。
dictを使うとキーと値を組み合わせてデータを保存することが可能です。

この記事ではPythonのdictの使い方をわかりやすく解説します。
具体的には↓を見ていきます。

  • 辞書とはどういうデータ構造か?

  • dictを初期化する

  • dictの値を参照する

  • dictのアイテムの一覧を得る

  • dictのキーの一覧を得る

  • dictの値の一覧を得る

  • 複数の辞書を結合する

  • 辞書内包表記

辞書とはどういうデータ構造か?

辞書とはキーと値を組み合わせたリストです。
キーは辞書の参照に使われます。辞書から何か値を取り出したい時に、キーを参照することで、それと対になっている値を取り出すことができます。
たとえば辞書にcatというキーがあったとして、このキーに整数20を紐づけたとします。
この20という値を辞書から取り出したい時に、catというキーを辞書で参照します。そうすると値20を取り出すことができます。

キーは辞書の中で一意なものです。つまり、重複したキーはマージされます。同じキーで別の値を管理することは出来ません。基本的に1つのキーで管理できる値は1つだけになります(リストやタプルなどは別です)。

辞書はプログラマーの間で非常に人気のあるデータ構造と言えます。
有名なプログラマーであるカーニハンとロブ・パイクは無人島に持って行きたいデータ構造だと例えています。
つまり辞書があれば退屈しないということでしょう。

Pythonではdictというクラスを使うことで辞書を作成することが可能です。
dictdictionaryの略、つまり辞書を指します。

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()内のタプルが取り出され、それがkvにアンパックされます。

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の辞書は色々なシーンで活躍する便利データ構造と言えます。
ぜひとも押さえておきたいところです。

吾輩の辞書に

不可能と言う言葉は

けっこうある

投稿者名です。64字以内で入力してください。

必要な場合はEメールアドレスを入力してください(全体に公開されます)。

投稿する内容です。