【问题标题】:Filter a list and order items by relevance过滤列表并按相关性排序项目
【发布时间】:2012-07-17 18:44:19
【问题描述】:

我有一个字符串列表:

my_list = ['Paul', 'Robinson', 'Hismith', 'Smith']

我需要对其进行过滤并按相关性对结果进行排序:

> filter_list(my_list, 'smith')
> ['Smith', 'Hismith']
> 
> filter_list(my_list, 'paul')
> ['Paul']

我的列表很小,如果我可以使用尽可能少的逻辑/库,那就太好了。

你会怎么做?

谢谢!

【问题讨论】:

  • 我只需要简单的相关逻辑,以便用户可以以更有用的方式使用有序列表。首先出现的完整匹配是最重要的一点(可能是唯一的一点)。

标签: python search filtering


【解决方案1】:

尝试以下操作(尽管您可能需要调整 cutoff= 选项):

import difflib

my_list = ['Paul', 'Robinson', 'Hismith', 'Smith']
print difflib.get_close_matches('Paul', my_list)
# ['Paul']
print difflib.get_close_matches('Smith', my_list)
# ['Hismith', 'Smith']

【讨论】:

  • 很好的答案(虽然没有相关性)。
  • @MarcoFucci 在我的回答中没有定义“相关性”的定义,所以我对“最相关”==“最相似”进行了抨击
【解决方案2】:

很难说,什么是“相关性”。在我的回答中,我只接受所寻求的 word 在元素内并按其长度对结果进行排序(很有可能首先出现 100% 匹配):

def filter_list(li, word):
    return sorted((elem for elem in li if word.lower() in elem.lower()), key=len)

【讨论】:

  • +1,尽管这不是按“相关性”排序的,不管 Marco 是什么意思。
  • @TimPietzcker - 我添加了一些“相关性”功能。
  • 这正是我的实现,但没有相关部分。
猜你喜欢
  • 1970-01-01
  • 2019-05-07
  • 1970-01-01
  • 2021-06-24
  • 2022-08-18
  • 2014-02-22
  • 2017-01-21
  • 2010-09-25
  • 2016-06-12
相关资源
最近更新 更多