настраиваемая сортировка с использованием поискового запроса в django - PullRequest
0 голосов
/ 07 февраля 2020

Я ищу термин "john" в списке dict,

У меня есть список dict, подобный этому:

"response": [
    {
        "name": "Alex T John"
    },
    {
        "name": "Ajo John"
    },
    {
        "name": "John",

    }]

Я использую:

response_query = sorted(response, key = lambda i: i['name']) 

response_query возвращает только возрастающий порядок результата, но мне нужен результат с именем в качестве приоритета.

Ожидаемый результат:

    {
        "name": "John"
    },
    {
        "name": "Ajo John"
    },
    {
        "name": "Alex T John",

    }

Первое имя, содержащее поисковый запрос, должно появляться первым .

1 Ответ

0 голосов
/ 07 февраля 2020

Если вам нужно отсортировать по приоритетам, вы можете попробовать ключевую функцию, которая возвращает кортеж. В вашем конкретном случае, насколько мне известно, эта функция будет работать нормально:

response_query = sorted(
    response,
    key=lambda i: (len(i['name'].split()) > 1, i['name'])
)

Другими словами, я добавил условие len(i['name'].split()) > 1, возвращающее False (оно будет go во-первых) если name состоит только из одного слова, иначе True.

Для случая, если вам нужно условие приоритета, так как name начинается с термина, который вы использовали в поиске, результат будет:

term = 'john'
...
response_query = sorted(
    response,
    key=lambda i: (not i['name'].lower().startswith(term), i['name'])
)
...