我有一个字符串列表,我必须根据一些搜索字符串对其进行排序。
My Search String is Home Depot
MyList = ['Depot Home','Rollins Home Furniture','HomeDepot 1346','Home Depot']
预期输出:
Sorted list: ['HomeDepot 1346','Home Depot','Depot Home','Rollins Home Furniture']
在排序列表中,第一个元素是搜索字符串删除空格的完全匹配项,第二个也是与空格的完全匹配项,第三个元素是Depot的部分匹配项(按字母顺序排列),第四个元素也是Home(字母顺序)的部分匹配项在仓库之后下达的订单)
我到目前为止所做的事情:
searchquery_startswith=[w for w in Mylist if w.startswith('HOME DEPOT'.strip())]
searchquery_substring= [w for w in Mylist if ('HOME DEPOT' in w and w not in searchquery_startswith)]
我知道我可以做这样的事情,但是我正在寻找更多的Python方式来实现这一目标。感谢所有帮助
答案 0 :(得分:2)
您可以定义一个自定义函数,该函数可以根据搜索查询对单词进行排名,然后将其与sorted
结合使用。
def search_for_home_depot(word):
result = 0
if word.lower().startswith('HOME DEPOT'.lower().replace(' ','')):
result += -2
if 'HOME DEPOT'.lower() in word.lower():
result += -1
return result
l = ['Depot Home','Rollins Home Furniture','HomeDepot 1346','Home Depot']
print([search_for_home_depot(x) for x in l])
print(sorted(l, key=search_for_home_depot))
> [0, 0, -2, -1]
> ['HomeDepot 1346', 'Home Depot', 'Depot Home', 'Rollins Home Furniture']
您可以调整每张支票的条件和权重,以细化结果。