让我们说我正在建立各种各样的基本搜索引擎。我有一个字符串列表作为搜索结果,我想在顶部订购具有最佳匹配结果的搜索结果列表。
我当前的代码如下所示(命名参数为例子)
import difflib
def order_by_best_match(search_results=["spam", "eggs", "spammy", "eggy"], search_query="spam"):
for result in search_results:
ratio = difflib.SequenceMatcher(None, result, search_query).ratio()
之后我不知道如何处理ratio
。我知道我必须按ratio
对列表进行排序,但我该怎么办呢?
答案 0 :(得分:9)
>>> import difflib
>>> a = ["spam", "eggs", "spammy", "eggy"]
>>> b = 'spam'
>>> sorted(a, key=lambda x: difflib.SequenceMatcher(None, x, b).ratio())
['eggy', 'eggs', 'spammy', 'spam']
另外,如果您想要相反的顺序:
>>> sorted(a, key=lambda x: difflib.SequenceMatcher(None, x, b).ratio(), reverse=True)
['spam', 'spammy', 'eggs', 'eggy']
答案 1 :(得分:3)
sorted
函数采用key
参数,您可以使用该参数来确定事物的排名方式。通常的做法是构建一个元组列表,然后根据元组的一个元素进行排序。
for result in search_results:
ratio = difflib.SequenceMatcher(None, result, search_query).ratio()
weighted_results.append((result, ratio))
print weighted_results
print sorted(weighted_results, key=lambda x: x[1])
给我们
[('spam', 1.0), ('eggs', 0.25), ('spammy', 0.8), ('eggy', 0.0)]
[('eggy', 0.0), ('eggs', 0.25), ('spammy', 0.8), ('spam', 1.0)]