使用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