[Python-Dev] Joys of Optimization

Raymond Hettinger raymond.hettinger at verizon.net
Wed Mar 17 22:04:05 EST 2004


For those with an interest, here are some timing scorecards which track
the performance of dictionary iteration:


C:\python24\python timedictiter.py
0.638557468278 keys()
0.648748721903 values()
2.97803432843 items()
1.04057057611 list(d)
1.19934712281 tuple(d)
2.23167921018 for k in d.iterkeys(): pass
2.2001936003 for v in d.itervalues(): pass
4.07347675958 for k, v in d.iteritems(): pass

C:\pydev>\python23\python timedictiter.py
0.886520893746 keys()
0.861855713304 values()
3.44381233343 items()
6.86479910827 list(d)
2.48302854557 tuple(d)
2.85350994821 for k in d.iterkeys(): pass
2.8332120887 for v in d.itervalues(): pass
6.70084312509 for k, v in d.iteritems(): pass

C:\pydev>\python22\python timedictiter.py
0.81167636065 keys()
0.893352218441 values()
2.99887443638 items()
6.83444576677 list(d)
2.48634656967 tuple(d)
4.54763489163 for k in d.iterkeys(): pass
4.53761544779 for v in d.itervalues(): pass
7.77635645921 for k, v in d.iteritems(): pass


Raymond Hettinger

#------------------------------------------------------
P.S.  Here is the timing suite:

from timeit import Timer

setup = """
import random
n = 1000
d = {}
for i in xrange(n):
    d[random.random()] = i
keys = d.keys
values = d.values
items = d.items
"""

stmts = [
    'keys()',
    'values()',
    'items()',
    'list(d)',
    'tuple(d)',
    'for k in d.iterkeys(): pass',
    'for v in d.itervalues(): pass',
    'for k, v in d.iteritems(): pass',
]

for stmt in stmts:
    print min(Timer(stmt, setup).repeat(5, 10000)), stmt




More information about the Python-Dev mailing list