[EMAIL PROTECTED] wrote:
> I am trying to write a basic anagram system, that takes a text file
> line by line and by sorting the string into its alphabetical form
> compares it to keys within a dictionary.
>
> If it matches a key I want to add it (in its unordered form) to a list
> for that key.
>
> So far this is what I have
>
> import sys, string, fileinput
>
> # takes an item (string) and converts it to its basic alphabetical
> form
> def getChar( item ):
> item_chars = []
> for i in range(len(item)):
> item_chars.append(item[i])
> item_chars.sort()
> return string.join(item_chars, "")
>
> anagramDict = {}
>
> for line in fileinput.input("fakelist.txt"):
> myLine = line.replace("\n", "") #remove the carriage returns
> myString = getChar(myLine) #get the alphabetical form
> for k in anagramDict.items(): #iterator through the keys in the
> dictionary
> if k[0] == myString: #if the key matches our string
> anagramDict[k].append([myLine])#append that k and add
> the value
> this line
> else:
> anagramDict[myString] = [myLine] #else there is no key the same
> so
> make a new one
>
> print anagramDict
>
A few suggestions.
Use string methods, rather than the string module.
Replace getChar with a simple one-liner (check out the builtin 'sorted'
function).
Consider whether it's really necessary to iterate over all the
dictionary keys.
Check out the setdefault method of dictionaries.
Duncan
--
http://mail.python.org/mailman/listinfo/python-list