Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 9th, 2012  |  syntax: None  |  size: 1.58 KB  |  hits: 20  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Optimized searching in Python against a list
  2. o1 => f, g, h
  3. o2 => f, g, i
  4. o3 => f, j, k
  5. o4 => k, j, m
  6.        
  7. filter(test1, filter(test2, filter(test3, the_list)))
  8.        
  9. filter(test1, filter(test2, filter(test3, the_list)))
  10.        
  11. class Dummy(object) :
  12.    def __init__(self, val) :
  13.       self.val=val
  14.  
  15. myList = [Dummy(str(val)) for val in xrange(100000)]
  16. mySet = set(myList)
  17.        
  18. print myList[3] in mySet
  19. >>> True
  20.        
  21. class Dummy(object) :
  22.    def __init__(self, val, someUniqueKey) :
  23.       self.val=val
  24.       self.key=someUniqueKey
  25.  
  26. myList = ... # create the list of elements with unique keys
  27. myDict = dict(zip([elem.key for elem in myList],myList)
  28.        
  29. from itertools import product
  30. from littletable import Table,DataObject
  31.  
  32. objects = Table()
  33. alphas = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  34. alphas += alphas.lower()
  35. import time
  36.  
  37. print "building table", time.time()
  38. objects.insert_many(
  39.     DataObject(k1=k1, k2=k2, k3=k3, created=time.time())
  40.         for k1,k2,k3 in product(alphas.upper(),alphas,alphas)
  41.     )
  42. print "table complete", time.time()
  43. print len(objects)
  44.  
  45. print "indexing table", time.time()
  46. for k in "k1 k2 k3".split():
  47.     objects.create_index(k)
  48. print "index complete", time.time()
  49.  
  50. print "get specific row", time.time()
  51. matches = objects.query(k1="X", k2="k", k3="W")
  52. for o in matches:
  53.     print o
  54. print time.time()
  55.        
  56. building table 1309377011.63
  57. table complete 1309377012.52
  58. 140608
  59. indexing table 1309377012.52
  60. index complete 1309377012.98
  61. get specific row 1309377012.98
  62. {'k3': 'W', 'k2': 'k', 'k1': 'X', 'created': 1309377011.9960001}
  63. {'k3': 'W', 'k2': 'k', 'k1': 'X', 'created': 1309377012.4260001}
  64. 1309377013.0