I've been spending today learning python and as an exercise I've ported a program I wrote in java that unscrambles a word. Before describing the problem, here's the code:
*--beginning of file--* #!/usr/bin/python # Filename: unscram.py def sort_string(word): '''Returns word in lowercase sorted alphabetically''' word = str.lower(word) word_list = [] for char in word: word_list.append(char) word_list.sort() sorted_word = '' for char in word_list: sorted_word += char return sorted_word print 'Building dictionary...', dictionary = { } # Notice that you need to have a file named 'dictionary.txt' # in the same directory as this file. The format is to have # one word per line, such as the following (of course without # the # marks): #test #hello #quit #night #pear #pare f = file('dictionary.txt') # This loop builds the dictionary, where the key is # the string after calling sort_string(), and the value # is the list of all 'regular' words (from the dictionary, # not sorted) that passing to sort_string() returns the key while True: line = f.readline() if len(line) == 0: break line = str.lower(line[:-1]) # convert to lowercase just in case and # remove the return at the end of the line sline = sort_string(line) if sline in dictionary: # this key already exist, add to existing list dictionary[sline].append(line) print 'Added %s to key %s' % (line,sline) #for testing else: # create new key and list dictionary[sline] = [line] print 'Created key %s for %s' % (sline,line) #for testing f.close() print 'Ready!' # This loop lets the user input a scrambled word, look for it in # dictionary, and print all matching unscrambled words. # If the user types 'quit' then the program ends. while True: lookup = raw_input('Enter a scrambled word : ') results = dictionary[sort_string(lookup)] for x in results: print x, print if lookup == 'quit': break *--end of file--* If you create dictionary.txt as suggested in the comments, it should work fine (assumeing you pass a word that creates a valid key, I'll have to add exceptions later). The problem is when using a large dictionary.txt file (2.9 MB is the size of the dictionary I tested) it always gives an error, specifically: (Note: ccehimnostyz is for zymotechnics, which is in the large dictionary) *--beginning of example--* Enter a scrambled word : ccehimnostyz Traceback (most recent call last): File "unscram.py", line 62, in ? results = dictionary[sort_string(lookup)] KeyError: 'ccehimnostyz' *--end of example--* If you'd like a copy of the dictionary I'm using email me at teoryn at gmail dot com or leave your email here and I'll send it to you (It's 702.2 KB compressed) Thanks, Kevin -- http://mail.python.org/mailman/listinfo/python-list