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')) -- http://mail.python.org/mailman/listinfo/python-list