对python 对象列表根据某个属性排序的方法
By:Roy.LiuLast updated:2014-07-23
对于一个已有的python list, 里面的内容是一些对象,这些对象有一些相同的属性值, 在一些特定的情况下,需要自己选择特定的排序,也就是根据某一个具体的属性来排序,在网上找了下资料,一般来说有两种方法,但从根本上来说,还是调用了list.sort 方法来实现。下面是简单的测试代码片段:
构造了一个 Person 类, 然后初始化一些对象放入obj_list 中, 然后想根据工资进行排序,方法一与方法二分别实现了升序或者降序。 以此类推还可以实现按年龄排序等.
本例结果如下:
#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 |
From:一号门
RELATED ARTICLES
- 利用Python脚本调用ssh scp命令批量拷贝文件
- Python MD5 Hashing
- 利用python ipset来设置linux防火墙黑白名单的方法
- 爬取某pygame技术博客
- 获取文件 MD5和SHA1
- Django 中文手册 chm 文档, 供下载参考
- python/django生成动态验证码, 动态刷新, 直接修改 img src 属性
- django访问静态资源文件报编码错误解决办法
- python whl 格式文件的安装
- python开发常见模块的安装
- python 调用SVN 命令报编码错误的解决办法
- 合并多个python list以及合并多个 django QuerySet 的方法
- python,Django做淘宝客登录参考代码
- 如何用 python,Djano 生成 SEO 友好的 URL, 包含中文处理
- 一个比较好用的python反编译工具
- 用python 实现 java.util.Properties 类的一些基本操作
- python 序列化成json 乱码问题的解决
- 是否该祭奠死去的ZOPE, 曾经浪费了我一年的青春.
- python得到得到当前登录用户信息
- 在BAE上搭建python,django环境小记
COMMENTS