ユーニックス総合研究所

  • home
  • archives
  • python-dict

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

🦝 < 吾輩の辞書に

🐭 < 不可能と言う言葉は

🦊 < けっこうある