辞書(dict)でキーの存在確認をする際の方法としては、
- in演算子を使いif文で条件分岐する
get()
メソッドを使うtry except
を使う(そんな人いるか?)
の3種類くらいだと思います。
その中でもget()
メソッドはワンライナーで書けて便利なのですが、速度的にはどうなのだろうと気になったのでそれぞれ速度を比較してみました。
プログラム
結果
- 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文が良い