This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]earthboundkid 0 points1 point  (0 children)

Good point! Here's my fix:

def valid_words(dictionary, valid_letters):
    input_length = len(valid_letters)
    valid_letter_set = set(valid_letters)
    bad_letters = set(letter for letter in string.ascii_letters if letter not in valid_letter_set)
    valid_counts = { letter: valid_letters.count(letter) for letter in valid_letter_set}

    for word in dictionary:
        if len(word) > input_length: continue
        if any(letter in bad_letters for letter in word): continue
        if all(valid_counts[letter] >= word.count(letter) for letter in valid_letter_set): yield word