ベスパリブ

プログラミングを主とした日記・備忘録です。ベスパ持ってないです。

Pythonの辞書(dict)のgetメソッドの速度を調べてみた

辞書(dict)でキーの存在確認をする際の方法としては、

  • in演算子を使いif文で条件分岐する
  • get()メソッドを使う
  • try exceptを使う(そんな人いるか?)

の3種類くらいだと思います。

その中でもget()メソッドはワンライナーで書けて便利なのですが、速度的にはどうなのだろうと気になったのでそれぞれ速度を比較してみました。

プログラム

gist.github.com

結果

  • in_operator1は、in演算子を使い、必ずアクセス成功する処理
  • in_operator2は、in演算子を使い、必ずKeyErrorする処理
  • try_except1は、try exceptを使い、必ずアクセス成功する処理
  • try_except2は、try exceptを使い、必ずKeyErrorする処理
  • get_method1は、get()メソッドを使い、必ずアクセス成功する処理
  • get_method2は、get()メソッドを使い、必ずKeyErrorする処理

時間は小数点第4位まで(5位以下切り捨て)

最速 /最遅

in_operator1 in_operator2 try_except1 try_except2 get_method1 get_method2
N=105 0.0079 0.0039 0.0049 0.0159 0.0109 0.0079
N=106 0.0678 0.0339 0.0458 0.1586 0.1019 0.0799
N= 107 0.6907 0.5215 0.4607 1.8228 1.0414 0.9741
N=108 8.0925 3.4299 4.6398 16.1180 10.2179 8.0003

考察

  • try exceptのexcept処理は遅い
  • get()メソッドは早くない
  • 速度を求めるならin演算子でif文が良い

参考URL

Python dict型でgetメソッドを使おう。(KeyError対策) | DevelopersIO