偶爾閑逛,看到有個帖子討論python的dict中查找key值效率的。索性寫了下面的測試程序,結果一目了然。
測試環境Win 7 64位操作系統,python版本為2.7.6
為防止cache對前后代碼速度的影響,先測試五次,兩段代碼交換后再測試五次。測試結果可以看出"in" 比has_key要稍稍快一點點,差別其實很小,只是在大字典中時才能看出來。


#以下測試比較has_key 和in查找字典元素的速度
#測試方法:測試五次,然后顛倒兩段代碼順序再測試五次
dict = {'Age': 7};
#先構造一個100000元素的大字典
i = 0
while (i<100000):
key0 = '%05d' % i
dict[key0] = i * i + 3 * i + 5
i = i+1
#測試has_key指令查找key值100000次
i = 0
count = 0
t0 = time.time()
while(i < 100000):
key0 = '%05d' % random.randint(0, 99999)
if dict.has_key(key0):
count += 1
i+=1
t1 = time.time() - t0
print "spent %f seconds, found %d key." % (t1, count)
#測試in指令查找key值100000次
i = 0
count = 0
t0 = time.time()
while(i < 100000):
key0 = '%05d' % random.randint(0, 99999)
if key0 in dict:
count += 1
i+=1
t1 = time.time() - t0
print "spent %f seconds, found %d key." % (t1, count)