Efficiently Identifying Whether Part Of String Is In List/dict Keys?
Solution 1:
This seems to be a good way:
input_strings = ["hello i am from denmark",
"that was in the united states",
"nothing here"]
dict_x = {"denmark" : "dk", "germany" : "ger", "norway" : "no", "united states" : "us"}
output_strings = []
forstring in input_strings:
for key, value in dict_x.items():
if key in string:
output_strings.append(value)
breakelse:
output_strings.append(string)
print(output_strings)
Solution 2:
Assuming:
lst = ["hello i am from denmark", "that was in the united states", "nothing here"]
dict_x = {"denmark" : "dk", "germany" : "ger", "norway" : "no", "united states" : "us"}
You can do:
res = [dict_x.get(next((k forkin dict_x if k in my_str), None), my_str) formy_strin lst]
which returns:
print(res) # -> ['dk', 'us', 'nothing here']The cool thing about this (apart from it being a python-ninjas favorite weapon aka list-comprehension) is the get with a default of my_str and next with a StopIteration value of None that triggers the above default.
Solution 3:
Something like this would work. Note that this will convert the string to the first encountered key fitting the criteria. If there are multiple you may want to modify the logic based on whatever fits your use case.
strings = [str1, str2, str3]
converted = []
forstring in strings:
updated_string = stringfor key, value in dict_x.items()
if key in string:
updated_string = value
break
converted.append(updated_string)
print(converted)
Solution 4:
Try
str_list = ["hello i am from denmark", "that was in the united states", "nothing here"]
dict_x = {"denmark" : "dk", "germany" : "ger", "norway" : "no", "united states" : "us"}
for k, v in dict_x.items():
for i in range(len(str_list)):
if k in str_list[i]:
str_list[i] = v
print(str_list)
This iterates through the key, value pairs in your dictionary and looks to see if the key is in the string. If it is, it replaces the string with the value.
Solution 5:
You can subclass dict and use a list comprehension.
In terms of performance, I advise you try a few different methods and see what works best.
class dict_contains(dict):
def __getitem__(self, value):
key = next((k forkinself.keys() if k in value), None)
returnself.get(key)
str1 = "hello i am from denmark"
str2 = "that was in the united states"
str3 = "nothing here"
lst = [str1, str2, str3]
dict_x = dict_contains({"denmark" : "dk", "germany" : "ger", "norway" : "no", "united states" : "us"})
res = [dict_x[i] or i foriin lst]
# ['dk', 'us', "nothing here"]
Post a Comment for "Efficiently Identifying Whether Part Of String Is In List/dict Keys?"