Python列表筛选匹配项时如何将精确匹配结果排在首位
解决方案
不需要使用正则表达式,直接用Python内置的sorted函数自定义排序权重即可实现,代码非常简洁。
实现逻辑:给每个匹配到的元素分配不同的排序优先级:
- 完全匹配关键词的优先级最高,权重设为0
- 关键词作为前缀的匹配优先级次之,权重设为1
- 仅包含关键词的匹配优先级最低,权重设为2
sorted函数会按照权重从小到大排序,即可得到符合要求的结果。
示例代码
a = ['mnoabc', 'defabc', 'abc', 'abcdef', 'ijk', 'lmn'] keyword = 'abc' # 先筛选出所有包含关键词的元素 matched_list = [item for item in a if keyword in item] # 按自定义规则排序 sorted_result = sorted(matched_list, key=lambda x: ( 0 if x == keyword else 1 if x.startswith(keyword) else 2 )) print(sorted_result)
输出结果
['abc', 'abcdef', 'mnoabc', 'defabc']
如果需要对同优先级的元素额外做字典序或者长度排序,只要在key的元组里加对应的规则即可,比如要同优先级按字符串长度升序排列,把key改成lambda x: (0 if x == keyword else 1 if x.startswith(keyword) else 2, len(x))就行。
内容的提问来源于stack exchange,提问作者abd
相关产品推荐
相关产品推荐

