Larry Bates:
> The only case where it would be faster would be if most of the keys were NOT
> in
> the dictionary (rather odd use case). Otherwise I believe you will find the
> first way quicker as the exceptions are infrequent.
I have written a small benchmark:
from random import shuffle
def test1(data, to_delete):
for item in to_delete:
try:
del data[item]
except KeyError:
pass
def test2(data, to_delete):
for item in to_delete:
if item in data:
del data[item]
N = 1000000
M = 2 * N
data = dict.fromkeys(xrange(N), 0)
to_delete = range(M)
shuffle(to_delete)
from timeit import default_timer as clock
t = clock()
#test1(data, to_delete) # 2.4 s
test2(data, to_delete) # 0.8 s
print round(clock() - t, 2), "s"
It creates a dictionary of the first million integers, and then tries
to delete the first two million of integers. So about 1/2 numbers are
present to be deleted. In this situation the version with the try-
except seems about 3 times slower than the other.
Bye,
bearophile
--
http://mail.python.org/mailman/listinfo/python-list