LoginSignup
4
0

More than 3 years have passed since last update.

Pythonでdictにkeyが存在するか確認したいとき `'key' in dic` と `dic.get('key')`ではどちらが早いのか知りたい

Posted at

概要

Pythonのdictにkeyがあるのか確認したいときがあります。

if 'key' in dic:
    pass
if dic.get('key') is not None:
    pass

あたりを思いつきました。
どちらが早いのか気になったので確認しました。

確認

version

% python --version
Python 3.7.1

検証に使ったコード

dict_has_key.py
import gc
import time

SIZE = 100000

dic = {}

##########################################
del dic
gc.collect()
dic = {}
for i in range(SIZE):
    dic[str(i)] = i

start = time.time()
for i in range(SIZE):
    dic.get('-1')
    dic.get('1')
elapsed_time = time.time() - start
print(f'"すでにあるdictにget": {elapsed_time:.6f}')

del dic
gc.collect()
dic = {}
for i in range(SIZE):
    dic[str(i)] = i

start = time.time()
for i in range(SIZE):
    '-1' in dic
    '1' in dic
elapsed_time = time.time() - start
print(f'"すでにあるdictに in": {elapsed_time:.6f}')

##########################################
del dic
gc.collect()
dic = {}
start = time.time()
for i in range(SIZE):
    dic[str(i)] = i
    dic.get('-1')
    dic.get('1')
elapsed_time = time.time() - start
print(f'"dictに追加しながらget": {elapsed_time:.6f}')

del dic
gc.collect()
dic = {}
start = time.time()
for i in range(SIZE):
    dic[str(i)] = i
    '-1' in dic
    '1' in dic
elapsed_time = time.time() - start
print(f'"dictに追加しながら in": {elapsed_time:.6f}')

結果

% repeat 3 (python ./dict_has_key.py; echo)
"すでにあるdictにget": 0.011132
"すでにあるdictに in": 0.007007
"dictに追加しながらget": 0.040769
"dictに追加しながら in": 0.040812

"すでにあるdictにget": 0.013944
"すでにあるdictに in": 0.009472
"dictに追加しながらget": 0.042927
"dictに追加しながら in": 0.040673

"すでにあるdictにget": 0.010466
"すでにあるdictに in": 0.007062
"dictに追加しながらget": 0.045189
"dictに追加しながら in": 0.037023

まとめ

inの方が早い雰囲気はあるが、dictに追加しながらだとそれほど差がないようす

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0