Pythonの辞書型(dictionary)を基本構文から解説
Pythonには、リストと異なりそれぞれの要素をキーで紐づけることが出来るデータ構造として、辞書型という型が用意されています。
辞書型はJSONをPythonから扱うときなどをはじめ、様々な場面で使用される重要な型です。他のプログラミング言語でも使用されており『連想配列』や『マップ』と呼ばれることもあります。
今回は、Pythonで辞書型を扱う方法を実際のコードを交えて解説していきます。
Pythonの辞書型について解説
複数のデータをひとまとまりのオブジェクトとして管理する方法のひとつとして、リストがあります。しかし、Pythonには配列の他に辞書型という型が存在します。
辞書型とは
辞書型とはキーと値のペアでデータを保持するデータ構造です。
辞書型においてすべての値はキーと紐づいており、辞書のようにキーワードを索引で調べれば、そのキーワードについての解説(値)を参照できる、という構造になっています。
ほとんどのプログラミング言語で用意されているデータ構造であり、Pythonでは辞書型と呼ばれていますが、他の言語では連想配列やマップといった名前で呼ばれています。
辞書型が役立つ場面
辞書型は前述の通りキーから値を参照することが出来るため、多くのデータをプログラム上で扱うときにキー名で値の取得や設定が可能です。
キー名の存在しないただの配列では、データの数や配列の次元数が大きくなるとどれがどのデータであったかを判別することが困難であるため、キー名で値を管理できる辞書型の利用が役立ちます。
また辞書型は、JSON ( JavaScript Object Notation ) と呼ばれるJavaScriptのオブジェクトの記法で書かれる軽量のデータフォーマットを扱う場合にも使われます。
JSONはキーと値のペアで記述されるフォーマットであり、これをPythonで読み込む場合には基本的にJSONの文字列を辞書型に変換して扱います。
JSONは、複数の言語からなるシステムの言語間・システム間の通信方法としてよく利用されているため、実際のアプリ・システム開発の中ではよく目にすることがあるでしょう。
辞書型のオブジェクトを作成する
Pythonで辞書型のオブジェクトを作成するには3つの方法があります。波括弧で作成する方法、コンストラクタで作成する方法、そしてfor文との組み合わせで作成する方法です。
波括弧で辞書型のオブジェクトを作成する
波括弧で辞書型のオブジェクトを作成するには、次のように書きます。
# 波括弧での書き方:{ “キー名” : 値 }
dict1 = {"id" : 1, "name" : "yamada"}
print(dict1)
#実行結果
{'id': 1, 'name': 'yamada'}
{ “キー名” : 値 } と書くことで、辞書型のオブジェクトを作成できます。
このとき波括弧内では、コロンで区切ることで何個でもキーと値のペアを作成することが出来ます。
コンストラクタで辞書型のオブジェクトを作成する
コンストラクタとはオブジェクトを作成、初期化する関数です。
辞書型のオブジェクトをコンストラクタで作成する場合は、次のように書きます。
dict2 = dict( [ ( “id”, 2 ), ( “name”, “sato” ) ] )
print(dict2)
# 実行結果
{'id': 2, 'name': 'sato'}
for文との組み合わせで辞書型のオブジェクトを作成する
Pythonには辞書内包表記という、辞書型のオブジェクトを作成する独自の記法が存在します。
辞書内包表記は { キーを格納する変数 : 値を格納する変数 for 要素 in リスト } という形式で書くことが出来ます。
dict3 = { val : val*3 for val in [2, 4, 6, 8] }
print(dict3)
# 実行結果
{2: 6, 4: 12, 6: 18, 8: 24}
辞書内包表記を用いた辞書型のオブジェクト作成処理は、他の方法で辞書型を作成するのと比べ、処理速度が速いという特徴があります。
他の言語には存在しない記法で少々慣れが必要ですが、活用できると様々な場面で役に立つ記法です。
辞書型のオブジェクトを利用する
次に、作成したオブジェクトから値を取得したり新しく値を追加したりする方法について解説していきます。
辞書型のオブジェクトから値を取得する
辞書型から値を取得するには、次のように書きます。
dict1 = {"id" : 1, "name" : "yamada"}
print(dict1["id"])
# 実行結果
1
print(dict1["name"])
# 実行結果
yamada
このように辞書[“キー名”] で辞書オブジェクトから値を取得することが出来ます。このとき、存在しないキー名を指定するとエラーが出てしまうので注意しましょう。
辞書型のオブジェクトに値を追加する
辞書型のオブジェクトに値を追加する例として、キーに “id” と “name” を持つ辞書に “age”キーの値を追加する方法を解説します。
もともと持っていないキーを作成し、そのキーに対応する値を設定するには次のように書きます。
dict1 = {"id" : 1, "name" : "yamada"}
dict1["age"] = 22
print(dict1)
# 実行結果
{'id': 1, 'name': 'yamada', 'age': 22}
このように、辞書 [“追加したいキー名”] = 追加したいキーの値 という形式で、辞書に新しいキーと値のペアを追加することが出来ます。
同様の書き方で既に存在するキーを指定した場合は、既存のキーの値が更新されます。
辞書型のオブジェクトで使用できるメソッドの例
Pythonの辞書型には、以下のような便利なメソッドが用意されています。これらを活用することで辞書型をより便利に使いこなすことが可能です。
dict.keys()
このメソッドは、辞書のすべてのキーを含むビューオブジェクトを返します。このビューオブジェクトは、辞書の内容が変更されると動的に更新されます。
ビューオブジェクトとは、Pythonの辞書型(dict)が提供する特殊なオブジェクトで、辞書のキー(keys()メソッド)、値(values()メソッド)、またはキーと値のペア(items()メソッド)を参照するために使用されます。
d = {'apple': 1, 'banana': 2, 'cherry': 3}
keys = d.keys()
print(keys) # dict_keys(['apple', 'banana', 'cherry'])
d['mango'] = 4
print(keys) # dict_keys(['apple', 'banana', 'cherry', 'mango'])
dict.values()
このメソッドは、辞書のすべての値を含むビューオブジェクトを返します。このビューオブジェクトも、辞書の内容が変更されると動的に更新されます。
d = {'apple': 1, 'banana': 2, 'cherry': 3}
values = d.values()
print(values) # dict_values([1, 2, 3])
d['mango'] = 4
print(values) # dict_values([1, 2, 3, 4])
dict.items()
このメソッドは、辞書のすべてのキーと値のペアを含むビューオブジェクトを返します。このビューオブジェクトも、辞書の内容が変更されると動的に更新されます。
d = {'apple': 1, 'banana': 2, 'cherry': 3}
items = d.items()
print(items) # dict_items([('apple', 1), ('banana', 2), ('cherry', 3)])
d['mango'] = 4
print(items) # dict_items([('apple', 1), ('banana', 2), ('cherry', 3), ('mango', 4)])
dict.update(other_dict)
d = {'apple': 1, 'banana': 2}
d.update({'cherry': 3, 'banana': 4})
print(d) # {'apple': 1, 'banana': 4, 'cherry': 3}
これらのメソッドはPythonの辞書型を操作する際に頻繁に使用されます。これらを理解し、適切に使用することで、Pythonの辞書型をより効果的に活用することができます。
ただし、これらのメソッドは辞書型のインスタンスメソッドであり、辞書型そのものが提供する関数ではないことも理解しておきましょう。
インスタンスメソッドとは、特定のクラスのインスタンスに対して操作を行うためのメソッドのことを指します。
これらのメソッドは、インスタンス自身(Pythonではselfという名前で参照されることが多い)にアクセスできるため、インスタンスの内部状態を読み取ったり、変更したりすることができます。
Pythonの辞書型(dict)も一種のクラスで、このdictクラスから生成される具体的な辞書(例えば上記のサンプルコード内の、{'apple': 1, 'banana': 2})がインスタンスです。
辞書型そのものが提供する関数としては、dict()(新しい辞書を作成する)などがあります。
また、Pythonの組み込み関数であるlen()は辞書の要素数を返すためによく使用されます。
これらの関数やメソッドを適切に組み合わせることで、Pythonの辞書型を最大限に活用することができます。
それぞれの関数やメソッドの詳細な仕様については、Pythonの公式ドキュメンテーションを参照してください。
まとめ
辞書型のオブジェクトを作成し、値を取得・追加する方法や幾つかの便利なメソッドを解説しました。
リストと異なりそれぞれの要素をキーで紐づけることが出来る辞書型は、様々なデータをPythonのプログラム上で扱うにあたって有用な型です。
また、PythonでJSONを扱うときにも辞書型は活用されます。
辞書型は様々な場面で活用される基本的な型なのでしっかりと学習し、自由に扱えるようにしましょう。
この記事のキーワードに関する勉強会・イベントを探す
TECH PLAYでは、ITエンジニア向けの勉強会・イベント情報を提供しています。
興味のある方はぜひご参加ください。