我需要为给定的问题编写代码。
我提供了一个单词,我需要找到与文件中给定的单词列表匹配的所有可能组合。
这是我的代码。我可以做得更好吗?我敢肯定它可以。请建议。
dict = {}
file = open("/usr/share/dict/words", "r")
for word in file: #Iterate through every word in the dictionary
word = word.strip().lower() #Strip newlines and send to lowercase
sorted_word = ''.join(sorted(word)) #Alphabetically sort the word
if sorted_word in dict: #Check if sorted_word is already a key
if word not in dict[sorted_word]: #Make sure word is not already in the list under the key sorted_word
dict[sorted_word].append(word) #Add to list under the key sorted_word
else: #If not in dictionary
dict[sorted_word] = [word] #Create new list with one entry
while(True): #Loop until quit is typed
jumble = raw_input("Enter a jumble to decode or 'quit': ") #Get input
jumble = jumble.lower() #Send jumble to lower
if(jumble == "quit"): #Quit if quit is typed
break
jumble = ''.join(sorted(jumble)) #Sort jumble alphabetical
if jumble in dict: #If sorted jumble exists in dictionary
results = dict[jumble] #Get list of words that match jumble
for result in results: #Loop through list printing results
print result, #Trailing , designates that there should be a space between entries
print "" #Print newlines
else: #Jumble not found in dictionary print message
print "Results for jumble not found"
答案 0 :(得分:1)
您可以使用set
和collections.defaultdict
来简化这一点:
import collections
# If you try to look up a key that doesn't exist in `words`,
# it will create a new `set()` for that key and return it.
words = collections.defaultdict(set)
with open("/usr/share/dict/words", "r") as file:
for word in file:
word = word.strip().lower()
sorted_word = "".join(sorted(word))
# `words[sorted_word]` is a set, so there's no need to check if
# `word` is already in it.
words[sorted_word].add(word)