Python3实现对列表按元组指定列进行排序的方法分析


Posted in Python onDecember 22, 2018

本文实例讲述了Python3实现对列表按元组指定列进行排序的方法。分享给大家供大家参考,具体如下:

Python版本: python3.+
运行环境: Mac OS
IDE: pycharm

Python内建的排序方法

1 排序方法介绍

Python中有2个排序函数,一个是list内置的sort()方法,另一个是全局的sorted()方法

sorted(iterable,key=None,reverse=False) #返回排好序的新列表,不改变对象本身,默认升序;reverse:-True降序 -False 正序对所有可迭代的对象均有效
list.sort(key=None,reverse=False) #将list自身进行排序,不返回新的list对象,默认升序;reverse:-True降序 -False 正序

2 基本的列表排序

1)list.sort()排序

data = [5, 7, 9, 3, -6, -7, -8, -9, 3, -8]
result = data.sort()
print(data) #结果为 [-9, -8, -8, -7, -6, 3, 3, 5, 7, 9]
print(result) #结果为None

2)sorted()排序

data = [5, 7, 9, 3, -6, -7, -8, -9, 3, -8]
result = sorted(data)
print(data) #结果为 [5, 7, 9, 3, -6, -7, -8, -9, 3, -8]
print(result) #结果为 [-9, -8, -8, -7, -6, 3, 3, 5, 7, 9]

3 以tuple作为list的元素

在默认情况下sort和sorted函数接收的参数是元组时,它将会先按元组的第一个元素进行排序再按第二个元素进行排序,再按第三个、第四个…依次排序。

我们通过一个简单的例子来了解它,以下面这个list为例:

data = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]

我们通过sorted()对它进行排序

data = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
result = sorted(data)
print(data) #结果为 [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
print(result) #结果为 [(0, 'B'), (0, 'a'), (1, 'A'), (1, 'B'), (2, 'A')]

会发现排序后的结果中(0, 'B')在(0, 'a')的前面。这是因为在按元组第一个元素排好之后,将(0, 'B'), (0, 'a')再按第二个元素进行排序了,而'B'的ASCII编码比'a'小,所以(0, 'B')就排在(0, 'a')的前面了。

那如何想要让它排序时不分大小写呢?

这就要用到sort方法和sorted方法里的key参数了。

我们来看一下具体的实现:

data = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
#利用参数key来规定排序的规则
result = sorted(data,key=lambda x:(x[0],x[1].lower()))
print(data) #结果为 [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
print(result) #结果为 [(0, 'a'), (0, 'B'), (1, 'A'), (1, 'B'), (2, 'A')]

其中的lambda x:(x[0],x[1].lower()可以理解为一个匿名函数;

其功能类似于:

def fun(x)
  return(x[0],x[1].lower())

如果想要以字母作为第一排序规则,并且字母大小写不敏感,该怎么实现?

这就能要运用到之前所讲到的

在默认情况下sort和sorted函数接收的参数是元组时,它将会先按元组的第一个元素进行排序再按第二个元素进行排序,再按第三个、第四个…依次排序。

再配合lambda返回一个自定义tuple;代码如下:

data = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
#将x[1].lower()作为返回元组里的第一个元素,按照sorted的排序规律,就会先按字母排序,再按数字排序了
result = sorted(data,key=lambda x:(x[1].lower(),x[0]))
print(data) #结果为 [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
print(result) #结果为 [(0, 'a'), (1, 'A'), (2, 'A'), (0, 'B'), (1, 'B')]

4 [扩展] 以dict作为list的元素

这个list里的元素是dict形式,每个dict都存有姓名和升高现在想要以升高进行升序排列:

data = [{'name': '张三', 'height': 175}, {'name': '李四', 'height': 165}, {'name': '王五', 'height': 185}]
#将x['height']最为返回tuple的第个一元素
result = sorted(data,key=lambda x:(x['height'],x['name']))
print(data) #结果为
print(result)
#data  结果:[{'name': '张三', 'height': 175}, {'name': '李四', 'height': 165}, {'name': '王五', 'height': 185}]
#result 结果:[{'name': '李四', 'height': 165}, {'name': '张三', 'height': 175}, {'name': '王五', 'height': 185}]
Python 相关文章推荐
windows 10下安装搭建django1.10.3和Apache2.4的方法
Apr 05 Python
python实现读取excel写入mysql的小工具详解
Nov 20 Python
python学习之matplotlib绘制散点图实例
Dec 09 Python
python2.7安装图文教程
Mar 13 Python
解决python 输出是省略号的问题
Apr 19 Python
Django中间件实现拦截器的方法
Jun 01 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
Jun 18 Python
解决django中ModelForm多表单组合的问题
Jul 18 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
Sep 07 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
Oct 11 Python
virtualenv介绍及简明教程
Jun 23 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
python代码 输入数字使其反向输出的方法
Dec 22 #Python
在Python中Dataframe通过print输出多行时显示省略号的实例
Dec 22 #Python
浅谈Pandas:Series和DataFrame间的算术元素
Dec 22 #Python
对Python3.x版本print函数左右对齐详解
Dec 22 #Python
对pandas的算术运算和数据对齐实例详解
Dec 22 #Python
Python使用pandas对数据进行差分运算的方法
Dec 22 #Python
利用arcgis的python读取要素的X,Y方法
Dec 22 #Python
You might like
PHP 危险函数解释 分析
2009/04/22 PHP
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
2009/06/08 PHP
基于PHP 面向对象之成员方法详解
2013/05/04 PHP
XAMPP安装与使用方法详细解析
2013/11/27 PHP
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
Codeigniter发送邮件的方法
2015/03/19 PHP
laravel 模型查询按照whereIn排序的示例
2019/10/16 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
动态加载script文件的两种方法
2013/08/15 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
JavaScript获取DOM元素的11种方法总结
2015/04/25 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
JavaScript数组方法大全(推荐)
2016/07/05 Javascript
利用JS实现数字增长
2016/07/28 Javascript
JQuery学习总结【一】
2016/12/01 Javascript
jQuery插件artDialog.js使用与关闭方法示例
2017/10/09 jQuery
Vue中封装input组件的实例详解
2017/10/17 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
2019/01/30 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
2020/07/18 Javascript
Vue.extend 登录注册模态框的实现
2020/12/29 Vue.js
[01:55]2014DOTA2国际邀请赛快报:国土生病 紧急去医院治疗
2014/07/10 DOTA
Python读取图片为16进制表示简单代码
2018/01/19 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
django Admin文档生成器使用详解
2019/07/22 Python
Pytorch 实现数据集自定义读取
2020/01/18 Python
django模板获取list中指定索引的值方式
2020/05/14 Python
外贸采购员求职的自我评价
2013/11/26 职场文书
婚礼证婚人证婚词
2014/01/13 职场文书
绿色环保标语
2014/06/12 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
群众路线党员个人剖析材料
2014/10/08 职场文书
酒会邀请函
2015/01/31 职场文书
交通安全温馨提示语
2015/07/14 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers
一文读懂navicat for mysql基础知识
2021/05/31 MySQL