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入门指引
Apr 01 Python
Python实现图片转字符画的代码实例
Feb 22 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
Jul 01 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
Jul 17 Python
python使用Matplotlib改变坐标轴的默认位置
Oct 18 Python
Python字符串格式化常用手段及注意事项
Jun 17 Python
Python 如何展开嵌套的序列
Aug 01 Python
python 实现图片修复(可用于去水印)
Nov 19 Python
Python实现微信表情包炸群功能
Jan 28 Python
python可视化之颜色映射详解
Sep 15 Python
python 实现图片特效处理
Apr 03 Python
Python 匹配文本并在其上一行追加文本
May 11 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
php 生成自动创建文件夹并上传文件的示例代码
2014/03/07 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
PHP会话处理的10个函数
2015/08/11 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
2016/08/11 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
javascript实现自动填写表单实例简析
2015/12/02 Javascript
用js实现放大镜的效果的简单实例
2016/05/23 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
js的三种继承方式详解
2017/01/21 Javascript
JavaScript实现图片无缝滚动效果
2017/07/07 Javascript
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
详解PHP后期静态绑定分析与应用
2018/03/21 Javascript
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
跟老齐学Python之大话题小函数(1)
2014/10/10 Python
Python基于正则表达式实现文件内容替换的方法
2017/08/30 Python
Python实现的直接插入排序算法示例
2018/04/29 Python
PYTHON基础-时间日期处理小结
2018/05/05 Python
numpy.std() 计算矩阵标准差的方法
2018/07/11 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
2019/06/27 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
使用html5新特性轻松监听任何App自带返回键的示例
2018/03/13 HTML / CSS
Manuka Doctor美国官网:麦卢卡蜂蜜和蜂毒护肤
2016/12/25 全球购物
New Balance俄罗斯官方网上商店:购买运动鞋
2020/03/02 全球购物
人力资源主管岗位职责
2014/01/29 职场文书
2015年店长工作总结范文
2015/04/08 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
行政处罚听证告知书
2015/07/01 职场文书
Python实现老照片修复之上色小技巧
2021/10/16 Python