Skip to content

Instantly share code, notes, and snippets.

@alvesjnr
Created January 31, 2013 16:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alvesjnr/4684327 to your computer and use it in GitHub Desktop.
Save alvesjnr/4684327 to your computer and use it in GitHub Desktop.
Naive Trie implementation
class Node(dict):
def __init__(self, value=None, *args, **kwargs):
self.value = value
super(Node,self).__init__(*args, **kwargs)
class Trie(object):
def __init__(self):
self.root = Node()
def insert(self, key, value):
root = self.root
for (i,c) in enumerate(key):
if c in root:
root = root[c]
else:
self._insert(root, key[i:], value)
break
def _insert(self, root, key, value):
n = Node()
k = key[0]
root[k] = n
if len(key) > 1:
self._insert(n, key[1:], value)
else:
n.value = value
def get(self, key):
root = self.root
for c in key:
if not c in root:
return None
else:
root = root[c]
return root.value
def __repr__(self):
return self.root.__repr__()
def __str__(self):
return self.root.__str__()
def __getitem__(self, key):
return self.get(key)
def __setitem__(self, key, value):
return self.insert(key, value)
if __name__ == '__main__':
t = Trie()
with open('/tmp/bb.txt') as b:
for line in b.readlines():
for w in line.split():
t[w] = w
import pdb; pdb.set_trace()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment