Python 使用多属性来进行排序


Posted in Python onSeptember 01, 2019

Python 中 list.sort() 是列表中非常常用的排序函数, key 参数可以对单个属性进行排序。

但是想要实现类似 sql 中 order by id, age 一样,对多个字段进行排序就不支持了。

py2 中 sort() 函数还有个 cmp 参数可以传入一个方法,可以自定义对多个属性进行排序,py3 中移除了这个字段。

py3 想要实现这个功能,需要使用 functools 模块中的方法,实例如下

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: wxnacy(wxnacy@gmail.com)

from functools import cmp_to_key

def cmp_func(a, b):

  if a['id'] < b['id']:
    return -1
  elif a['id'] > b['id']:
    return 1

  if a['name'] < b['name']:
    return -1
  elif a['name'] > b['name']:
    return 1

  return 0

arr.sort(key=cmp_to_key(cmp_func))

上面的例子我们实现了 id 正序排序,如果 id 相同,则按照 age 正序排序

为了方便可以封装成一个方法,以供列表调用,封装的方法 demo 可以参见地址

https://github.com/wxnacy/study/blob/master/python/office_module/list_demo/sort_by_multi_fields.py

总结

以上所述是小编给大家介绍的Python 使用多属性来进行排序,希望对大家有所帮助,如果大家有任何疑问欢迎给大家留言,小编会及时回复大家的!

Python 相关文章推荐
python动态加载变量示例分享
Feb 17 Python
Python continue语句用法实例
Mar 11 Python
Python logging模块学习笔记
May 24 Python
python通过自定义isnumber函数判断字符串是否为数字的方法
Apr 23 Python
python脚本实现xls(xlsx)转成csv
Apr 10 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
Aug 18 Python
浅谈python中字典append 到list 后值的改变问题
May 04 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
Apr 25 Python
Python + OpenCV 实现LBP特征提取的示例代码
Jul 11 Python
Django的models模型的具体使用
Jul 15 Python
Python尾递归优化实现代码及原理详解
Oct 09 Python
一篇文章弄懂Python关键字、标识符和变量
Jul 15 Python
详解一种用django_cache实现分布式锁的方式
Sep 01 #Python
python实现多进程通信实例分析
Sep 01 #Python
python输出带颜色字体实例方法
Sep 01 #Python
基于Django框架的权限组件rbac实例讲解
Aug 31 #Python
Django之PopUp的具体实现方法
Aug 31 #Python
对django layer弹窗组件的使用详解
Aug 31 #Python
python2.7实现复制大量文件及文件夹资料
Aug 31 #Python
You might like
怎么使 Mysql 数据同步
2006/10/09 PHP
phpinfo 系统查看参数函数代码
2009/06/05 PHP
php缓冲 output_buffering和ob_start使用介绍
2014/01/30 PHP
PHP实现更改hosts文件的方法示例
2017/08/08 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
js获取图片大小的函数代码
2011/09/20 Javascript
jquery中的事件处理详细介绍
2013/06/24 Javascript
让复选框只能选择一项的方法
2013/10/08 Javascript
js拆分字符串并将分割的数据放到数组中的方法
2015/05/06 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
BootStrap Validator使用注意事项(必看篇)
2016/09/28 Javascript
浅谈Vue-cli单文件组件引入less,sass,css样式的不同方法
2018/03/13 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
vue写h5页面的方法总结
2019/02/12 Javascript
使用xampp将angular项目运行在web服务器的教程
2019/09/16 Javascript
vue+element tabs选项卡分页效果
2020/06/29 Javascript
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
详解Vue中的自定义指令
2020/12/07 Vue.js
Python中pip更新和三方插件安装说明
2018/07/08 Python
Python基于mysql实现学生管理系统
2019/02/21 Python
python实现共轭梯度法
2019/07/03 Python
python中下标和切片的使用方法解析
2019/08/27 Python
解决 jupyter notebook 回车换两行问题
2020/04/15 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
HTML5 Canvas 起步(1) - 基本概念
2009/05/12 HTML / CSS
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
牧马人澳大利亚官网:Wrangler澳大利亚
2019/10/08 全球购物
交通事故赔偿协议书
2014/04/15 职场文书
文明倡议书
2015/01/19 职场文书
布达拉宫的导游词
2015/02/02 职场文书
2015年小学校长工作总结
2015/05/19 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
2019年XX公司的晨会制度及流程!
2019/07/23 职场文书
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏