## DEV Community

HHMathewChan

Posted on • Originally published at rebirthwithcode.tech

# Python Exercise 20:Find the pattern

## Question

• Given a dictionary containing up to six phrases,
• return a list containing the matching phrases according to the given string (p).
• Ignore any digit that is placed after or before the given string.
• Whether the first letter is capitalized or not,
• if all letters of the word match the given string (p), it is valid.
• If it does not match the given string (p) then None.

### Example

• example 1
``````find_pattern({
"Phrase1": "COVID-19 is no good",
"Phrase2": "COVID-18 is no good",
"Phrase3": "COVID-17 is no good"
}, "COVID-19")

➞ ["Phrase1 = COVID-19", "Phrase2 = None", "Phrase3 = None"]
``````
• example 2
``````find_pattern({
"Phrase1": "Edabit is great",
"Phrase2": "Edabit is very great",
"Phrase3": "Edabit is really great"
}, "really")

➞ ["Phrase1 = None", "Phrase2 = None", "Phrase3 = really"]
``````

## My solution

• algorithm
``````>>get the value of each Phrase
>>separate the the value into a list by white space
>>store each separated value into list
the list name from phase1_list to phase6_list
>>check if the given string (p) appear in the each phrase
for phrase1 to phrase 6:
if the given string (p) appear in the phrase value
add that phrase and value into one string
add that string to the final list
>>return a final list
``````
• code
``````def find_pattern(dictionary: dict, string_p: str) -> list:
prefix = "Phrase"
counter = 1
final_list = []
for sentence in dictionary.values():
if string_p in sentence:
final_list.append(f"{prefix}{counter} = {string_p}")
else:
final_list.append(f"{prefix}{counter} = None")
counter += 1
return final_list
``````

# Other solution

``````def find_pattern(dict_, p):
phrase = {True:p,False:"None"}
phrases = []
for key,val in dict_.items():
phrases.append('{} = {}'.format(key,phrase[p in val]))
return sorted(phrases)
``````
• shortest version
``````def find_pattern(dct, p):
return sorted("{} = {}".format(d, p if p in dct[d] else None) for d in dct)
``````