
Untitled
By: a guest on
Jun 9th, 2012 | syntax:
None | size: 1.58 KB | hits: 20 | expires: Never
Optimized searching in Python against a list
o1 => f, g, h
o2 => f, g, i
o3 => f, j, k
o4 => k, j, m
filter(test1, filter(test2, filter(test3, the_list)))
filter(test1, filter(test2, filter(test3, the_list)))
class Dummy(object) :
def __init__(self, val) :
self.val=val
myList = [Dummy(str(val)) for val in xrange(100000)]
mySet = set(myList)
print myList[3] in mySet
>>> True
class Dummy(object) :
def __init__(self, val, someUniqueKey) :
self.val=val
self.key=someUniqueKey
myList = ... # create the list of elements with unique keys
myDict = dict(zip([elem.key for elem in myList],myList)
from itertools import product
from littletable import Table,DataObject
objects = Table()
alphas = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
alphas += alphas.lower()
import time
print "building table", time.time()
objects.insert_many(
DataObject(k1=k1, k2=k2, k3=k3, created=time.time())
for k1,k2,k3 in product(alphas.upper(),alphas,alphas)
)
print "table complete", time.time()
print len(objects)
print "indexing table", time.time()
for k in "k1 k2 k3".split():
objects.create_index(k)
print "index complete", time.time()
print "get specific row", time.time()
matches = objects.query(k1="X", k2="k", k3="W")
for o in matches:
print o
print time.time()
building table 1309377011.63
table complete 1309377012.52
140608
indexing table 1309377012.52
index complete 1309377012.98
get specific row 1309377012.98
{'k3': 'W', 'k2': 'k', 'k1': 'X', 'created': 1309377011.9960001}
{'k3': 'W', 'k2': 'k', 'k1': 'X', 'created': 1309377012.4260001}
1309377013.0