searching algorithm
Michael Bentley
michael at jedimindworks.com
Sat May 12 01:23:41 EDT 2007
On May 11, 2007, at 3:50 AM, Michael Bentley wrote:
>
> Here's an idea: use a rats' nest of dictionaries and do all the
> lookup work up front when you build the rats' nest. Maybe something
> like this:
...
Oops! This is better :-)
#! /usr/bin/env python
import pprint
dictionary = """absinth:pelin
absinthe:pelin
absolute:apsolutan
absolute:apsolutni kod
absolute:apsolutno
absolute:čist
absolute:nesumnjiv
absolute:potpun
absolute:savrsen
absolute coordinates:apsolutne koordinate
absolute frequency:apsolutna učestalost
absolute gap:apsolutni jaz
absolute line spacing:apsolutni međurazmak linija
absolute majority:apsolutna većina
absolute pointing device:apsolutni pokazivački uređaj
absolute quantity:apsolutni udio
absolute value:apsolutna vrijednost
absolute zero:apsolutna nula
absolutely:apsolutno
absolutely:bezuvjetno
absolutely:nezavisno
absolutely:potpuno
absolutely:samostalno
absolutely:sasvim
absolution:odrjesenje
absolution:oprostaj
absolutism:apsolutizam
absolve:odrijesiti
absolve:osloboditi
absorb:absorbirati
absorb:apsorbirati
absorb:crpsti"""
lookup = {'words':{}, 'letters':{}}
for translation in dictionary.split('\n'):
english, croatian = translation.split(':')
if english in lookup['words']:
lookup['words'][english].append(croatian)
else:
lookup['words'][english] = [english, croatian]
for position, letter in enumerate(english):
if position == 0:
youAreHere = lookup['letters']
if letter not in youAreHere:
youAreHere[letter] = {'words':[]}
if lookup['words'][english] not in youAreHere[letter]['words']:
youAreHere[letter]['words'].append(lookup['words'][english])
youAreHere = youAreHere[letter]
def tryit(partial):
youAreHere = lookup['letters']
for letter in partial:
youAreHere = youAreHere[letter]
return youAreHere['words']
if __name__ == '__main__':
pprint.pprint(tryit('abs'))
print '=' * 50
pprint.pprint(tryit('absorb'))
More information about the Python-list
mailing list