django - 在 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",
}
包含搜索词的名字应该首先出现。
解决方案
如果您需要按优先级排序,您可以尝试返回元组的键函数。在您的特定情况下,据我所知,此功能可以正常工作:
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'])
)
推荐阅读
- ios - 从 web url 在 UIAlertAction 中添加图像
- java - 命名查询休眠中的语法错误
- c# - 关闭表单并再次打开它的方法是什么
- javascript - 如何在 wordpress 的 css javascript 工具箱插件中修复错误“参数必须是实现可计数的数组或对象”
- php - 如何在 PHP 和 MySQL 中逐月查找不到 6 个月前的行
- haskell - 小数类型在 Haskell 中
- perl - 用于 grep 的 Perl 脚本始终阻止并打印指定的行
- go - go中如何使用通道?
- angular - '[value]' 没有以反应形式 Angular 设置控制值
- reactjs - 无法在 react-native 中创建 ref