Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用django中的搜索词进行自定义排序_Django_Sorting_Django Rest Framework - Fatal编程技术网

使用django中的搜索词进行自定义排序

使用django中的搜索词进行自定义排序,django,sorting,django-rest-framework,Django,Sorting,Django Rest Framework,我在一张字典里搜索“约翰”一词 我有一张这样的目录: "response": [ { "name": "Alex T John" }, { "name": "Ajo John" }, { "name": "John", }] 我正在使用: response_query = sorted(response, key = lambda i: i['name']) response\u query只

我在一张字典里搜索“约翰”一词

我有一张这样的目录:

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

    }]
我正在使用:

response_query = sorted(response, key = lambda i: i['name']) 
response\u query只返回结果的升序,但我需要一个以名字为优先级的结果

预期结果:

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

    }

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

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

response_query = sorted(
    response,
    key=lambda i: (len(i['name'].split()) > 1, i['name'])
)
换句话说,我添加了条件
len(I['name'].split())>1
,如果
name
只包含一个单词,则返回
False
(它将首先返回),否则返回
True

对于这种情况,如果您需要优先级条件,因为
名称
以您在搜索中使用的术语开头,那么结果将是:

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

使用
sorted(response,key=lambda i:i['name'].index('John'))
?或者你所要问的是
排序(…,reverse=True)
?@Shinratensei,但它的显示结果像John Cap,John Dio,John。但它应该像John,John Cap,John Dio
排序(response,key=lambda i:i['name'].index('John')+len(i['name'])
,但我觉得你有很多条件,这个lambda可能最终无法读取,你应该实现一种方法,它可以进行更慢但更准确的排序。所以,请在你的问题中澄清你的第一要务是什么。由一个单词组成的名称或以您要查找的单词开头的名称,或任何其他名称。我发现你的问题不够清楚,无法回答。名称由一个词组成,所以我的建议很好。它还返回您需要的结果。通过使用您的代码,术语包含首先出现的姓氏。我的结果:John,Abraham T John,John C