Pythonのdictでkeyが存在するか確認する方法 完全ガイド

はじめに

Pythonにおいて、dictはよく使用されるデータ型の一つです。dictの中にはkeyとvalueがペアとなって保存されており、keyを指定することでvalueを取得できます。しかし、存在しないkeyを指定した場合、エラーが発生してしまいます。

そこで、本記事ではPythonのdictでkeyが存在するか確認する方法について解説します。

keyの存在確認についての必要性

dictに存在しないkeyを指定すると、KeyErrorが発生します。そのため、事前にkeyが存在するかを確認してから処理を行う必要があります。

例えば、以下のようなdictがあったとします。

fruits = {'apple': 100, 'banana': 200, 'orange': 300}

ここで、存在しないkeyを指定してvalueを取得しようとすると、KeyErrorが発生します。

print(fruits['grape'])
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-3-8bfc5a49e4a8> in <module>()
----> 1 print(fruits['grape'])
KeyError: 'grape'

このようなエラーを避けるために、keyの存在確認を行う必要があります。

in演算子を用いた方法

Pythonでは、in演算子を用いることでdictにkeyが存在するかを確認することができます。

fruits = {'apple': 100, 'banana': 200, 'orange': 300}
if 'apple' in fruits:
    print('apple exists')
else:
    print('apple does not exist')

上記のコードでは、’apple’がfruitsのkeyに存在するかを確認し、存在する場合は’apple exists’、存在しない場合は’apple does not exist’というメッセージを表示します。

この方法の利点は、シンプルであることです。しかし、大きなdictの場合、in演算子を用いると処理に時間がかかることがあります。

getメソッドを用いた方法

dictにはgetメソッドがあり、このメソッドを用いることでkeyの存在確認を行うことができます。

fruits = {'apple': 100, 'banana': 200, 'orange': 300}
if fruits.get('apple') is not None:
    print('apple exists')
else:
    print('apple does not exist')

上記のコードでは、getメソッドを用いて’apple’がfruitsのkeyに存在するかを確認し、存在する場合は’apple exists’、存在しない場合は’apple does not exist’というメッセージを表示します。

この方法の利点は、in演算子に比べて処理が早くなることです。また、getメソッドには第二引数を指定することができ、keyが存在しない場合には指定した値を返すことができます。

fruits = {'apple': 100, 'banana': 200, 'orange': 300}
print(fruits.get('grape', 0))

上記のコードでは、’grape’がfruitsのkeyに存在しない場合には0を返します。

KeyErrorの例外処理を用いた方法

dictには、キーが存在しない場合に発生するKeyErrorを捕捉することができます。try-except文を用いることで、KeyErrorが発生した場合にエラーメッセージを表示することができます。

fruits = {'apple': 100, 'banana': 200, 'orange': 300}
try:
    print(fruits['grape'])
except KeyError:
    print('grape does not exist')

上記のコードでは、’grape’がfruitsのkeyに存在しない場合には’grape does not exist’というメッセージを表示します。

この方法の利点は、in演算子やgetメソッドよりもわかりやすく、エラーメッセージを表示することができることです。

各方法のパフォーマンス比較

それでは、各方法のパフォーマンスを比較してみましょう。以下のコードを実行し、各方法の処理時間を計測します。

import time
fruits = {str(i): i for i in range(1000000)}
start = time.time()
if '999999' in fruits:
    pass
end = time.time()
print('in:', end - start)
start = time.time()
if fruits.get('999999') is not None:
    pass
end = time.time()
print('get:', end - start)
start = time.time()
try:
    fruits['999999']
except KeyError:
    pass
end = time.time()
print('KeyError:', end - start)

上記のコードでは、100万個の要素を持つdictから、最後の要素のkeyを検索しています。

実行結果は以下のようになります。

in: 0.0003008842468261719
get: 0.00015783309936523438
KeyError: 9.5367431640625e-07

上記の結果から、KeyErrorを用いた方法が最も高速であることがわかります。

まとめ

Pythonのdictでkeyが存在するか確認する方法について解説しました。

  • in演算子を用いた方法はシンプルであるが、処理に時間がかかることがある。
  • getメソッドを用いた方法はin演算子に比べて処理が早く、第二引数でデフォルト値を指定することができる。
  • KeyErrorを用いた方法はエラーメッセージを表示することができ、最も高速である。

keyの存在確認を行う際には、使用環境に応じて最適な方法を選択するようにしましょう。