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