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

辞書に格納した値を取得する
辞書は、キーと値のペアを管理するための非常に効率的なデータ構造です。特に、キーを指定するだけで対応する値を即座に取得できるため、実世界の辞書(単語とその意味)と同様に使うことができます。ここでは、辞書に格納された値をどのように取り出すか、その基本的な方法や注意点、そしてデフォルト値を利用した安全な値の取得方法について、具体例と表を交えて詳しく解説します。

プログラムのダウンロード
「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。
1.辞書から値を取得する基本的な方法
辞書から値を取り出す最もシンプルな方法は、角括弧 [] を使ってキーを指定することです。しかし、存在しないキーを指定するとエラーが発生するため、用途に応じて get メソッドも利用されます。
1.1. 角括弧演算子による値の取得
以下の例では、ファイルの拡張子をキーに、対応するプログラミング言語を値として管理する辞書を作成し、キー 'js' に対する値を取得しています。
サンプルプログラム
# 辞書の作成:ファイル拡張子とプログラミング言語の対応
file_types = {'py': 'Python', 'js': 'JavaScript', 'rb': 'Ruby'}
# キー 'js' に対応する値を取得する
language = file_types['js']
print("キー 'js' の値:", language)
# 出力例: キー 'js' の値: JavaScript実行結果
キー 'js' の値: JavaScript解説
- 辞書
file_typesは、キーと値のペアが{}で囲まれ、各ペアはコロン:で区切られています。 file_types['js']と指定することで、キー'js'に対応する値'JavaScript'が瞬時に返されます。
1.2. get メソッドによる安全な値の取得
角括弧演算子で存在しないキーを指定すると KeyError が発生します。これに対し、get メソッドは指定したキーが存在しない場合に例外を発生させず、デフォルト値(もしくは None)を返すため、より安全に値を取得できます。
サンプルプログラム
# 辞書 file_types を用いて、存在しないキー 'cpp' の値を取得する例
# 角括弧演算子の場合(エラーが発生する)
try:
language_cpp = file_types['cpp']
except KeyError as error:
print("エラー:", error)
# 出力例: エラー: 'cpp'
# get メソッドの場合(デフォルト値を指定しない)
language_cpp_none = file_types.get('cpp')
print("get() を使った場合(デフォルトなし):", language_cpp_none)
# 出力例: get() を使った場合(デフォルトなし): None
# get メソッドの場合(デフォルト値 'C++' を指定)
language_cpp_default = file_types.get('cpp', 'C++')
print("get() を使った場合(デフォルト 'C++'):", language_cpp_default)
# 出力例: get() を使った場合(デフォルト 'C++'): C++実行結果
エラー: 'cpp'
get() を使った場合(デフォルトなし): None
get() を使った場合(デフォルト 'C++'): C++解説
- キー
'cpp'は辞書file_typesに存在しないため、角括弧を使うとKeyErrorが発生します。 file_types.get('cpp')はキーが存在しない場合にNoneを返します。file_types.get('cpp', 'C++')とすることで、キーが存在しなかった場合に'C++'というデフォルト値を返すように設定できます。
下記の表は、角括弧演算子と get メソッドを使った値取得の違いをまとめたものです。
| 取得方法 | 記法 | キーが存在しない場合の動作 |
|---|---|---|
| 角括弧演算子 | file_types['js'] | KeyError が発生する |
| get メソッド(デフォルトなし) | file_types.get('cpp') | None を返す |
| get メソッド(デフォルト指定) | file_types.get('cpp', 'C++') | 指定したデフォルト値(例: 'C++')を返す |
2.辞書から値を取得する際の注意点
辞書から値を取得する際は、存在しないキーへのアクセスによるエラー発生を防ぐため、get メソッドを使うか、キーの存在確認を行うことが推奨されます。また、取得した値の利用方法にも注意が必要です。
2.1. KeyError の発生と回避
存在しないキーを角括弧で指定するとプログラムがクラッシュする恐れがあるため、キーの存在をあらかじめ確認するか、get メソッドを使います。
サンプルプログラム
# キー 'go' が存在しない場合のチェック例
if 'go' in file_types:
language_go = file_types['go']
else:
language_go = 'Default Language'
print("キー 'go' の値:", language_go)
# 出力例: キー 'go' の値: Default Language実行結果
キー 'go' の値: Default Language解説
if 'go' in file_types:によって、辞書内にキー'go'が存在するかどうかを事前に確認しています。- キーが存在しない場合は、安全にデフォルトの値を設定することができます。
2.2. get メソッドを活用したコードの簡素化
get メソッドを用いることで、存在しないキーに対するエラー処理が不要になり、コードがシンプルに書けます。
実行結果
# get メソッドでキー 'go' を取得(デフォルト値 'Golang' を指定)
language_go = file_types.get('go', 'Golang')
print("get() を使った場合のキー 'go' の値:", language_go)
# 出力例: get() を使った場合のキー 'go' の値: Golang実行結果
get() を使った場合のキー 'go' の値: Golang解説
getメソッドを使うことで、キーが見つからない場合にもプログラムが例外を発生させずに、指定したデフォルト値'Golang'を返すため、エラーハンドリングが不要となります。
まとめ
辞書に格納された値の取得方法は、角括弧演算子と get メソッドという2通りがあります。
- 角括弧演算子を使用すると、キーが存在する場合に迅速に対応する値を返しますが、存在しない場合は
KeyErrorが発生します。 - get メソッドを使用すると、存在しないキーに対しても例外を発生させずに
Noneあるいは指定したデフォルト値を返すため、安全に値を取得できます。 - キーの存在確認やデフォルト値の設定を活用することで、辞書を用いたデータアクセスがより堅牢かつ効率的になります。
