python 排序 sorted 如果第一个条件 相同 则按第二个条件排序

怎样遍历一个list  符合下列条件

1. 按照元组的第一个从小到大排序
2. 如果第一个相同  则按照元组第2个从大到小 排序

  1. a = [[2,3],[4,1],(2,8),(2,1),(3,4)]
  2. b = sorted(a,key=lambda x: (x[0], -x[1]))
  3. print b
  1. a = [[2,{'a':8}],[4,{'a':1}],(2,{'a':8}),(2,{'a':1}),(3,{'a':4})]
  2. array = [7,8]
  3. def fun(x):
  4. return (-x[0],x[1].get('a'))
  5. b = sorted(a,key=fun)
  6. print b

性能这玩意还是要用数据说话

  1. import time
  2. n = xrange(1000000)
  3. x = zip(n, n)
  4. start = time.time()
  5. x.sort(key = lambda x: (x[0], -x[1]))
  6. end = time.time()
  7. print 'key', end-start
  8. x = zip(n, n)
  9. start = time.time()
  10. x.sort(cmp=lambda x, y: x[0] - y[0] or y[1] - x[1])
  11. end = time.time()
  12. print 'cmp', end-start
输出:
  1. key 2.34500002861 cmp 0.269000053406

key的代码确实优雅些,但不管从直观上,还是实测结果,都看不出来key更快。

如果逆序不能前面加个 '-'  来解决 , 可以用下面的办法  例如: 排序的是个字符串

  1. class Reversinator(object):
  2. def __init__(self, obj):
  3. self.obj = obj
  4. def __lt__(self, other):
  5. return other.obj < self.obj
  6. a = [(2,'3'),(4,'1'),(2,'8'),(2,'1'),(3,'4')]
  7. print sorted(a, key=lambda x: (x[0], Reversinator(x[1])))

补充:

python本身提供了排序功能,其排序算法是稳定的,即key相等的两项在排序后的先后次序不变

下面通过list.sort来演示一下如何通过key函数来进行自定义的排序

所谓的key函数,就是以参加排序的每一项作为输入,而输出则为用来排序的key

  1. #python list 排序
  2. def my_key1(x):
  3. return x % 10
  4. aList = [4, 5, 1, 2, 12, 34, 56, 9 ,80]
  5. aList.sort() #默认按升序排列
  6. print(aList)
  7. aList.sort(reverse = True) #按降序排列
  8. print(aList)
  9. aList.sort(key = my_key1) #根据key函数,按照个位数进行升序排列
  10. print(aList)
  11. def my_key2(x):
  12. return x[1]
  13. aList = [(4,'ab'), (56,'c'), (1,'bb'), (102, 'a')]
  14. aList.sort(key = my_key2) #按照每个元组的第2分量,即字符串排序
  15. print(aList)

原文:http://blog.chinaunix.net/xmlrpc.php?id=3140368&r=blog/article&uid=429659

python 排序 sorted 如果第一个条件 相同 则按第二个条件排序相关推荐

  1. Python成长之路第一篇(4)_if,for,while条件语句

    有了以上的基本基础,已经上面写的几个小练习,大家肯定有很多的不满,比如查询为什么查询一次就退出了呢?下面我们来学习条件语句 一.万恶的加号 以前我们在print的时候如果要加上变量都有是使用+来作为连 ...

  2. 【MyBatis-Plus】第二章 条件构造器

    第二章 条件构造器 文章目录 第二章 条件构造器 一.继承关系 二.SQL 拼接方法 1.AbstractWrapper 定义 2.QueryWrapper 定义 3.UpdateWrapper 定义 ...

  3. python 基础语法学习笔记(2019年4月第二周学习笔记)

    python day01 2019.4.8 计算机基础,python 变量 1.随机存储器就是内存:断电数据丢失,读写速度快 2.外存储器,硬盘,断电数据依然保存,缺点,读写速度慢 3.操作系统是什么 ...

  4. Python按元组中第一个字符串升序第二个字符串降序排序

    问题描述:假设有一个列表,里面包含若干元组,每个元组中有两个字符串,现在要求对列表中的元组进行排序,排序规则为:第一个字符串升序,如果第一个字符串相同则按第二个字符串降序. 参考代码: 运行结果: - ...

  5. python dict sorted 排序

    我们知道Python的内置dictionary数据类型是无序的,通过key来获取对应的value.可是有时我们需要对dictionary中 的item进行排序输出,可能根据key,也可能根据value ...

  6. 【Python学习笔记】第一章基础知识:格式化输出,转义字符,变量类型转换,算术运算符,运算符优先级和赋值运算符,逻辑运算符,世界杯案例题目,条件判断if语句,猜拳游戏与三目运算符

    Python学习笔记之[第一章]基础知识 前言: 一.格式化输出 1.基本格式: 2.练习代码: 二.转义字符 1.基本格式: 2.练习代码: 3.输出结果: 三.输入 1.基本格式: 2.练习代码: ...

  7. python中sorted的用法append_Python中高阶函数sorted()用法

    在Python中,有内置的排序方法:sorted(iterable, key, reverse). Sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序.key指定的函数 ...

  8. Python 内建函数 - sorted(iterable[, key][, reverse])

    Manual 直译 实例 基本排序 key函数 operator模块函数 升序和降序 排序稳定性和复杂排序 其他 拓展阅读 Manual Return a new sorted list from t ...

  9. 【Python】sorted函数的使用

    1.概述 sorted()函数是python自带的排序函数,只要是可迭代对象都可以用sorted函数进行排序. sorted()函数在排序后会产生一个新的序列,原有的序列依旧存在. 函数形式 sort ...

最新文章

  1. mysql 提交_MySQL 事务提交过程
  2. SSM实现个人博客系统
  3. weblogic从入门到起飞!(域模块、扩展模块)(三)
  4. zookeeper 都有哪些使用场景?
  5. 玩转oracle 11g(5):表空间的作用
  6. RSocket协议初识
  7. HTML5中的自定义属性总结
  8. rest-assured之获取响应数据(Getting Response Data)
  9. react月份选择控件_看我的案例:用react写一个日历控件!
  10. 基于JAVA+SpringMVC+MYSQL的医院皮试管理系统
  11. M进制转N进制(C++)
  12. android pie华为更新,华为多款机型近期将迎来Android Pie系统更新,下列这几款肯定有你...
  13. Linux自动配置部署,企业级自动化部署方案——ansible实现tomcat自动安装和配置,...
  14. ACDsee的安装过程
  15. excel模板报表转PDF下载
  16. 安装好vmware后界面默认英语如何修改成中文或者其他语言
  17. 满足互动、发出用户民意的BBS论坛
  18. ​卧槽!这世上为什么要有乱码这个东西???
  19. 编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、数学课(Math)和平均值(avg),方法包括求三门课的平
  20. Google I/O 见闻

热门文章

  1. linux正则表达式的使用方法,Linux中基本正则表达式
  2. pg多行合并为逗号分隔一行_postgresql 将逗号分隔的字符串转为多行的实例_PostgreSQL_数据库...
  3. lol游戏挂机软件_LOL出手整治,大量玩家被封10年,代练屡禁不止的原因找到了...
  4. 软件测试工具按用途分分为哪几类,以测试的形态分软件测试可以分为哪几类?...
  5. 中级php开发面试,PHP中级工程师面试题(二)
  6. clickhouse 同步mysql_ClickHouse和他的朋友们(9)MySQL实时复制与实现
  7. 皮一皮:这是什么鬼畜产品!
  8. 皮一皮:所以这也是大数据的一种?
  9. 每日一皮:当你开始研究一个新项目时是这样的吗?
  10. 每日一皮:程序员的生存状态 ...