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)
Credit
- challenge on edabit
Top comments (0)