Home > Blockchain >  Parsing a list nested within a dictionary for words with similar characters in Python
Parsing a list nested within a dictionary for words with similar characters in Python

Time:04-04

As my first personal project I am building a Wordle "solver" that comes up with a first guess word then takes an input of the letters that were correct in the word then searches the word list for words with similar characters. To do this I stored each word in a dictionary with the key being the word and the value being each character in the word i.e dodge: [d, o, d, g, e]. I am currently experimenting to get code running that parses through the values of the dictionary to match the characters to the inputted letters but am stumped on how to search through the lists within the dictionary as a loop.

Here's my code for inputting the correct letters:

correct_letters_1 = list(letters for letters in input("Input corrects letters: ").strip().split())

Here's one of my attempts at parsing the dictionary:

for letters in correct_letters_1: 
    if letters in word_dictionary.values(): 
       print("yes")

I'm pretty sure this problem has something to do with my code parsing the entire lists within the dictionary rather than each individual character but even when I try inputting the whole word, i.e Input Correct Letters: d o d g e; I still don't have any output.

If someone could put a beginner on the right track it would be much appreciated.

CodePudding user response:

You might be looking to compare the whole list, rather than the letters:

correct_letters_1 = list(input("Enter correct letters: ").strip())

# correct_letters_1 is a whole list
if correct_letters_1 in word_dictionary.values():
    print("yes")

# Inputting "abc"
>>> correct_letters_1
['a', 'b', 'c']
>>> word_dictionary
{'abc': ['a', 'b', 'c']}
>>> correct_letters_1 in word_dictionary.values()
True

To check if the user's guess is a subset of any of the words:

correct_letters_1 = list(input("Enter correct letters: ").strip())
let_set = set(correct_letters_1)

word_dictionary = {'abc': ['a', 'b', 'c'],
                   'abcde': ['a', 'b', 'c', 'd', 'e'],
                   'ab': ['a', 'b'],
                   'test': ['t', 'e', 's', 't']}

# Check to see if correct_letters_1 is a subset of any word in the dictionary
close_words = ["".join(x) for x in word_dictionary.values() if let_set <= set(x)]

Which can be simplified to:

correct_letters_1 = input("Enter correct letters: ").strip()
let_set = set(correct_letters_1)

words = ["abc", "test", "ab"]

# Check to see if correct_letters_1 is a subset of any word in the list words
close_words = [x for x in words if let_set <= set(x)]
  • Related