Skip to content

Instantly share code, notes, and snippets.

@rafaelcaricio
Created March 9, 2012 23:24
Show Gist options
  • Save rafaelcaricio/2009266 to your computer and use it in GitHub Desktop.
Save rafaelcaricio/2009266 to your computer and use it in GitHub Desktop.
test_hash.py
*.swp
*.pyc
*.pyo
#!/usr/bin/python
# -*- coding: utf-8 -*-
import json
cars = json.loads(open('./fixtures/fipe_carro.json').read())
tree = {}
for v in cars:
for name in v['translated_names']:
for i in xrange(1, len(name) + 1):
tree_node = tree.get(name[:i], [])
tree_node.append(v)
tree[name[:i]] = tree_node
#!/usr/bin/python
# -*- coding: utf-8 -*-
import json
cars = json.loads(open('../api/fixtures/fipe_carro.json').read())
class Tree(dict):
def __init__(self, *args, **kwargs):
self.current_values = []
def __getitem__(self, key):
node = super(Tree, self).__getitem__(key[0])
if len(key[1:]) > 0:
return node[key[1:]]
return node.current_values
def push(self, key, obj):
node = self.get(key[0], Tree())
node.current_values.append(obj)
if len(key[1:]) > 0:
node.push(key[1:], obj)
self[key[0]] = node
@classmethod
def from_list(cls, objects, get_index):
new_tree = cls()
for obj in objects:
key = get_index(obj)
if hasattr(key, 'next'):
for k in key:
new_tree.push(k, obj)
else:
new_tree.push(key, obj)
return new_tree
tree = Tree.from_list(cars, lambda car: (name for name in car['translated_names']))
print tree['coupe-4']
#!/usr/bin/python
# -*- coding: utf-8 -*-
import json
class Tree(dict):
def __setitem__(self, key, obj):
"""
Pushes a new object in the tree.
"""
for i in xrange(3, len(key) + 1):
tree_node = self.get(key[:i], [])
super(Tree, self).__setitem__(key[:i], tree_node)
tree_node.append(obj)
@classmethod
def from_list(cls, objects, get_key):
"""
Build tree form a list of objects.
"""
tree = cls()
for obj in objects:
key_value = get_key(obj)
if isinstance(key_value, list):
for key in key_value:
tree[key] = obj
else:
tree[key_value] = obj
return tree
cars = json.loads(open('../api/fixtures/fipe_carro.json').read())
tree = Tree.from_list(cars, lambda car: car['translated_names'])
print tree['attracti.']
#!/usr/bin/python
# -*- coding: utf-8 -*-
from api.nary import Tree
import json
cars = json.loads(open('./fixtures/fipe_carro.json').read())
tree = Tree.from_list(cars, lambda vehicle: vehicle['translated_names'])
@vbmendes
Copy link

Criado. Já te coloquei como colaborador.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment