このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Python入門】キーと値の組を格納する辞書

キーと値の組を格納する辞書
辞書は、キーと値の組を効率的に管理し、高速な検索を実現するためのマッピング型データ構造です。Pythonの辞書は内部でハッシュ法を利用しており、指定したキーに対応する値を瞬時に取得できます。実世界での辞書が単語とその意味を結びつけるように、Pythonの辞書もキー(見出し語)と値(その説明やデータ)を関連付けて管理します。ここでは、キーと値の組をどのように格納するか、辞書の作成方法や特性、また検索の高速性などについて、具体例と表を用いて詳しく解説します。

プログラムのダウンロード
「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。
1.辞書の基本概念と特徴
辞書は「キー: 値」のペアを波括弧 {}
の中にカンマで区切って並べることで作成されます。以下の表は、辞書の主要な特徴と、それがどのように現実世界の辞書に似ているかを示しています。
特徴 | 説明 |
---|---|
キーと値の組 | キーに対して値を関連付け、素早く値を検索可能。 |
ミュータブル | 辞書は作成後も要素の追加、削除、更新ができる。 |
キーの一意性 | 同じキーを複数回格納すると、後から指定した値で上書きされる。 |
キーのハッシュ法による管理 | キーはハッシュ法により管理され、指定したキーを高速に見つけることができる。 |
挿入順序の保持(Python 3.7以降) | キーが追加された順序が、取り出す際にも保持される。 |
解説
- 辞書は、キーを元に内部のハッシュテーブルから対応する値を高速に取得するため、検索処理が非常に効率的です。
- 辞書のキーは必ずハッシュ可能(イミュータブル)なオブジェクトでなければならず、例えば数値、文字列、タプルなどが使用されます。
1.1. 辞書の用途と実世界の例
辞書は、例えば電話帳、商品カタログ、言語辞典など、見出し語(キー)に対する情報(値)を管理するのに適しています。たとえば、国コードと国名を関連付けた辞書を考えてみます。
サンプルプログラム
# 国コードをキー、国名を値とする辞書の例
countries = {'us': 'United States', 'jp': 'Japan', 'de': 'Germany'}
print("国コードと国名の辞書:", countries)
# 出力例: 国コードと国名の辞書: {'us': 'United States', 'jp': 'Japan', 'de': 'Germany'}
実行結果
国コードと国名の辞書: {'us': 'United States', 'jp': 'Japan', 'de': 'Germany'}
解説
- この辞書では、
'us'
というキーに対して'United States'
という値が対応付けられています。 - 実際のアプリケーションでは、商品コード、ユーザーID、エラーメッセージなど、さまざまな情報の管理に辞書が利用されます。
1.2. 辞書の作成方法
辞書は主に波括弧 {}
を用いて作成しますが、以下のようにいくつかの方法があります。
(a) リテラル記法による作成
サンプルプログラム
# 複数のキーと値を持つ辞書(波括弧を使用)
lang = {'us': 'English', 'jp': 'Japanese', 'fr': 'French'}
print("リテラル記法による辞書:", lang)
実行結果
リテラル記法による辞書: {'us': 'English', 'jp': 'Japanese', 'fr': 'French'}
(b) dict 関数を使った作成
サンプルプログラム
# キーと値の組のタプルをリストにまとめて作成
lang2 = dict([('us', 'English'), ('jp', 'Japanese'), ('fr', 'French')])
print("dict 関数を使った辞書:", lang2)
実行結果
dict 関数を使った辞書: {'us': 'English', 'jp': 'Japanese', 'fr': 'French'}
(c) キーワード引数を使った作成
サンプルプログラム
# キーワード引数を利用して作成(キーは識別子として記述)
lang3 = dict(us='English', jp='Japanese', fr='French')
print("キーワード引数で作成した辞書:", lang3)
実行結果
キーワード引数で作成した辞書: {'us': 'English', 'jp': 'Japanese', 'fr': 'French'}
下記の表は、上記3つの作成方法の違いをまとめたものです。
作成方法 | 記法例 | 特徴 |
---|---|---|
リテラル記法 | {'us': 'English', 'jp': 'Japanese', 'fr': 'French'} | 直感的で読みやすい。 |
dict 関数とイテラブル | dict([('us', 'English'), ('jp', 'Japanese'), ('fr', 'French')]) | 任意のイテラブルから辞書を生成できる。 |
dict 関数とキーワード引数 | dict(us='English', jp='Japanese', fr='French') | キーが識別子として記述でき、簡潔な記法が利用可能 |
解説
- どの方法も同じ辞書を生成しますが、用途に応じて使い分けることができます。
- リテラル記法は最も一般的ですが、外部データから動的に辞書を作成する場合は
dict
関数が便利です。
2.辞書のキーと値の操作
辞書は、キーを高速に検索して対応する値を取り出すために設計されています。また、キーは一意であり、重複するキーが指定された場合、後からの値で上書きされます。
2.1. キーによる値の取得
実世界の辞書で見出し語に対応する説明を調べるように、Pythonの辞書でもキーを指定することで、対応する値を取得できます。
サンプルプログラム
# 辞書からキー 'jp' を使って値を取得する例
language = lang['jp']
print("キー 'jp' の値:", language)
# 出力例: キー 'jp' の値: Japanese
実行結果
キー 'jp' の値: Japanese
解説
lang['jp']
とすることで、キー'jp'
に対応する値がすぐに返されます。- キーが存在しない場合は
KeyError
が発生するため、存在確認が必要な場合はget()
メソッドを使用すると良いでしょう。
2.2. キーの上書きと順序の保持
辞書に同じキーを複数回追加すると、後から指定した値で上書きされます。また、Python 3.7以降、辞書はキーが追加された順序を保持します。
サンプルプログラム
# 同じキー 'jp' を複数回使用した例
lang_update = {'us': 'English', 'jp': 'Japanese', 'jp': 'Nihongo', 'fr': 'French'}
print("キーの上書き結果:", lang_update)
# 出力例: キーの上書き結果: {'us': 'English', 'jp': 'Nihongo', 'fr': 'French'}
実行結果
キーの上書き結果: {'us': 'English', 'jp': 'Nihongo', 'fr': 'French'}
解説
- キー
'jp'
は最初'Japanese'
として追加されましたが、その後'Nihongo'
で上書きされ、最終的には'Nihongo'
が辞書に残ります。 - なお、追加された順序が保持されるため、キーの順序が辞書を表示したときにそのまま反映されます。
まとめ
辞書は、キーと値の組を格納することで、指定したキーに対する値を迅速に検索・取得するための強力なデータ構造です。
- 基本概念: 辞書は、波括弧
{}
内に「キー: 値」のペアをカンマ区切りで格納して作成します。 - 作成方法: リテラル記法、
dict
関数、キーワード引数を用いた方法があり、用途に応じて使い分けが可能です。 - キーの特性: キーはハッシュ法によって管理され、重複したキーは後の値で上書きされ、追加された順序が保持されます。
- 利用例: 辞書は、実世界の辞書のように、キーに対する情報の検索や、データのマッピングに非常に適しており、商品情報、設定データ、翻訳データなど、さまざまな場面で利用されます。
これらの特徴を理解することで、Pythonにおける辞書の活用方法を効果的に習得し、プログラムの効率的なデータ管理に役立てることができます。