Сортировка по месту нахождения поисковой строки

Возможно ли отсортировать результат поиска в зависимости от того, где была найдена строка поиска? В основном я использую Django Rest и пытаюсь показать результаты сверху, если строка поиска найдена в начале.

Например,

values = [ "another test", "test", "something", "teeest"]
search_string="te"
result=["another test", "test", "teeest"]

Я хочу привести последние два впереди, так как в начале есть "te", как

result=[ "test", "teeest", "another test"]

Используйте sorted с key как str.startswith:

sorted(values, key=lambda x: not x.startswith(search_string))
# or without `not`
sorted(values, key=lambda x: x.startswith(search_string), reverse=True)

Выход:

['test', 'teeest', 'another test', 'something']

Вы можете фильтровать result дважды, один раз для предметов, которые начинаются с search_string, а другой для тех, которые не начинаются:

[i for i in result if i.startswith(search_string)] + [i for i in result if not i.startswith(search_string)]

Обычно, если вы хотите сортировать по месту нахождения строки поиска, вы можете использовать str.index() для записи места начала строки поиска, а затем сортировать по этим позициям.

values = [ "another test", "test", "something", "teeest"]
search_string="te"
l = [ ((v.index(search_string), i), v) for i, v in enumerate(values) if search_string in v ]
l.sort()
_, result = zip(*l)
Вернуться на верх