このページで解説している内容は、以下の 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 あるいは指定したデフォルト値を返すため、安全に値を取得できます。
  • キーの存在確認やデフォルト値の設定を活用することで、辞書を用いたデータアクセスがより堅牢かつ効率的になります。