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 面向对象 成员的访问约束
Dec 23 Python
Python读写Redis数据库操作示例
Mar 18 Python
python网络编程学习笔记(三):socket网络服务器
Jun 09 Python
Python THREADING模块中的JOIN()方法深入理解
Feb 18 Python
用virtualenv建立多个Python独立虚拟开发环境
Jul 06 Python
mysql 之通过配置文件链接数据库
Aug 12 Python
python3将视频流保存为本地视频文件
Jun 20 Python
Pycharm无法使用已经安装Selenium的解决方法
Oct 13 Python
python基于property()函数定义属性
Jan 22 Python
Python配置pip国内镜像源的实现
Aug 20 Python
python如何编写类似nmap的扫描工具
Nov 06 Python
python动态规划算法实例详解
Nov 22 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
ip签名探针
2006/10/09 PHP
使用 eAccelerator加速PHP代码的目的
2007/03/16 PHP
php 修改、增加xml结点属性的实现代码
2013/10/22 PHP
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
wampserver改变默认网站目录的办法
2015/08/05 PHP
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
js报错 Object doesn't support this property or method的原因分析
2011/03/31 Javascript
jquery中dom操作和事件的实例学习-表单验证
2011/11/30 Javascript
js生成缩略图后上传并利用canvas重绘
2014/05/15 Javascript
浅谈js中的闭包
2015/03/16 Javascript
JavaScript计算两个日期时间段内日期的方法
2015/03/16 Javascript
jquery实现列表上下移动功能
2016/02/25 Javascript
详解JavaScript for循环中发送AJAX请求问题
2020/06/23 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
JS验证全角与半角及相互转化的介绍
2017/05/18 Javascript
vue 组件 全局注册和局部注册的实现
2018/02/28 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
python3+PyQt5泛型委托详解
2018/04/24 Python
解决Python pandas plot输出图形中显示中文乱码问题
2018/12/12 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
详解一种用django_cache实现分布式锁的方式
2019/09/01 Python
python图像处理模块Pillow的学习详解
2019/10/09 Python
PageFactory设计模式基于python实现
2020/04/14 Python
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
开工仪式主持词
2014/03/20 职场文书
工作证明范本(2篇)
2014/09/14 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
2015年体育教学工作总结
2015/05/20 职场文书
军事博物馆观后感
2015/06/05 职场文书
酒店员工管理制度
2015/08/05 职场文书
毕业班工作总结
2015/08/10 职场文书
详解MongoDB的条件查询和排序
2021/06/23 MongoDB
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers