首页 > 解决方案 > 在 django 中使用搜索词进行自定义排序

问题描述

我正在 dict 列表中搜索术语“john”,

我有一个这样的字典列表:

"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",

    }

包含搜索词的名字应该首先出现。

标签: djangosortingdjango-rest-framework

解决方案


如果您需要按优先级排序,您可以尝试返回元组的键函数。在您的特定情况下,据我所知,此功能可以正常工作:

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

换句话说,我添加了条件len(i['name'].split()) > 1,如果 仅包含一个单词,则返回False(它将先行)name,否则True

对于这种情况,如果您需要优先条件作为name您在搜索中使用的术语的开头,结果将是:

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

推荐阅读