python实现对象列表根据某个属性排序的方法详解


Posted in Python onJune 11, 2019

本文实例讲述了python实现对象列表根据某个属性排序的方法。分享给大家供大家参考,具体如下:

对于一个已有的python list, 里面的内容是一些对象,这些对象有一些相同的属性值, 在一些特定的情况下,需要自己选择特定的排序,也就是根据某一个具体的属性来排序,在网上找了下资料,一般来说有两种方法,但从根本上来说,还是调用了list.sort 方法来实现。下面是简单的测试代码片段:

#coding:utf-8
class Person:
  def __init__(self,name,age,salary):
    self.name = name
    self.age = age
    self.salary = salary
obj_list = [
      Person('juneys',20,30000),
      Person('sam',20,20000),
      Person('eddy',22,25000),
      Person('eagle',25,10000)
      ]
#第一种方法
obj_list.sort(cmp=None, key=lambda x:x.salary, reverse=False)
print '***********第一种方法***********************'
for obj in obj_list:
  print obj.name,obj.salary
# 第二种方法,更适合于大量数据的情况.
try:
  import operator
except ImportError:
  cmpfun= lambda x: x.count # use a lambda if no operator module
else:
  cmpfun= operator.attrgetter("salary") # use operator since it's faster than lambda
obj_list.sort(key=cmpfun, reverse=True)
print '***********第二种方法***********************'
for obj in obj_list:
  print obj.name,obj.salary

构造了一个 Person 类, 然后初始化一些对象放入obj_list 中, 然后想根据工资进行排序,方法一与方法二分别实现了升序或者降序。 以此类推还可以实现按年龄排序等.

本例结果如下:

***********第一种方法***********************
eagle 10000
sam 20000
eddy 25000
juneys 30000
***********第二种方法***********************
juneys 30000
eddy 25000
sam 20000
eagle 10000

Python 相关文章推荐
Python常见数据结构详解
Jul 24 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
Apr 10 Python
django manage.py扩展自定义命令方法
May 27 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
详解Python3序列赋值、序列解包
May 14 Python
在Python中使用MySQL--PyMySQL的基本使用方法
Nov 19 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
Dec 19 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
Feb 05 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
Dec 04 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 Python
pyqt5蒙版遮罩mask,setmask的使用
Jun 11 Python
利用python做数据拟合详情
Nov 17 Python
Python实现计算文件MD5和SHA1的方法示例
Jun 11 #Python
python 求1-100之间的奇数或者偶数之和的实例
Jun 11 #Python
python flask框架实现传数据到js的方法分析
Jun 11 #Python
python 求一个列表中所有元素的乘积实例
Jun 11 #Python
python ChainMap的使用和说明详解
Jun 11 #Python
python 计算一个字符串中所有数字的和实例
Jun 11 #Python
python 实现返回一个列表中出现次数最多的元素方法
Jun 11 #Python
You might like
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
解析php中如何调用用户自定义函数
2013/08/06 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
Linux下手动编译安装PHP扩展的例子分享
2014/07/15 PHP
PHP中把有符号整型转换为无符号整型方法
2015/05/27 PHP
Laravel 创建指定表 migrate的例子
2019/10/09 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
javascript RadioButtonList获取选中值
2009/04/09 Javascript
教你用AngularJS框架一行JS代码实现控件验证效果
2014/06/23 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
javascript html5实现表单验证
2016/03/01 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
bootstrap响应式表格实例详解
2017/05/15 Javascript
浅谈JavaScript中的属性:如何遍历属性
2017/09/14 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
在Vue methods中调用filters里的过滤器实例
2018/08/30 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
2019/05/08 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
JavaScript实现复选框全选和取消全选
2020/11/20 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
2021/01/22 Vue.js
python如何通过protobuf实现rpc
2016/03/06 Python
Python对HTML转义字符进行反转义的实现方法
2019/04/28 Python
pycharm 如何取消连按两下shift出现的全局搜索
2021/01/15 Python
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
HTML5 video标签(播放器)学习笔记(一):使用入门
2015/04/24 HTML / CSS
介绍一下linux文件系统分配策略
2012/11/17 面试题
开学典礼主持词
2014/03/19 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
狂人日记读书笔记
2015/06/30 职场文书
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫
Python matplotlib安装以及实现简单曲线的绘制
2022/04/26 Python