Seems like using tuple as dictionary is not a good idea....
dique
chezdique at yahoo.com
Wed Nov 27 01:10:37 EST 2002
Might as well split the tuple to levels of dictionary.. m[(i,j,k)] ->
m[i][j][k],
turns out to be more efficient...
Some real figures:
time taken for <function multipleDict at 0x008BFB00>: 4.164s
time taken for <function tupleDict at 0x008C08F0>: 30.468s
time taken for <function useMultipleDict at 0x008C21B8>: 2.162s
148500000
time taken for <function useTupleDict at 0x008C28D8>: 3.424s
148500000
time taken for <function useMultipleDict at 0x008C21B8>: 2.156s
148500000
time taken for <function useTupleDict at 0x008C28D8>: 3.288s
148500000
------------ the source ----------------
import time
def timeFunction(f, *args):
st = time.clock()
ret = f(*args)
et = time.clock()
print "time taken for %s: %.03fs" % (f, et-st)
return ret
def multipleDict():
m = {}
for i in range(100):
m[i] = {}
for j in range(100):
m[i][j] = {}
for k in range(100):
m[i][j][k] = i+j+k
return m
def useMultipleDict(m):
l = 0
for i in range(100):
for j in range(100):
for k in range(100):
l += m[i][j][k]
return l
def tupleDict():
m = {}
for i in range(100):
for j in range(100):
for k in range(100):
m[(i,j,k)] = i+j+k
return m
def useTupleDict(m):
l = 0
for i in range(100):
for j in range(100):
for k in range(100):
l += m[(i,j,k)]
return l
md = timeFunction(multipleDict)
td = timeFunction(tupleDict)
print timeFunction(useMultipleDict, md)
print timeFunction(useTupleDict, td)
print timeFunction(useMultipleDict, md)
print timeFunction(useTupleDict, td)
More information about the Python-list
mailing list