Сортировка по месту нахождения поисковой строки
Возможно ли отсортировать результат поиска в зависимости от того, где была найдена строка поиска? В основном я использую 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)