概要
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に追加しながらだとそれほど差がないようす