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 相关文章推荐
python实现udp数据报传输的方法
Sep 26 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 Python
python检查URL是否正常访问的小技巧
Feb 25 Python
浅析python递归函数和河内塔问题
Apr 18 Python
Python打印“菱形”星号代码方法
Feb 05 Python
Python Requests库基本用法示例
Aug 20 Python
python根据url地址下载小文件的实例
Dec 18 Python
python IDLE 背景以及字体大小的修改方法
Jul 12 Python
python数据预处理之数据标准化的几种处理方式
Jul 17 Python
django formset实现数据表的批量操作的示例代码
Dec 06 Python
Django+python服务器部署与环境部署教程详解
Mar 30 Python
python文件编写好后如何实践
Jul 07 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防止表单重复提交的几种常用方法汇总
2014/08/19 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
JTrackBar水平拖动效果
2007/07/15 Javascript
Javascript UrlDecode函数代码
2010/01/09 Javascript
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
使用vue.js制作分页组件
2016/06/27 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
2016/10/13 Javascript
Vue.js之slot深度复制详解
2017/03/10 Javascript
微信小程序获取用户openid的实现
2018/12/24 Javascript
JavaScript学习笔记之数组基本操作示例
2019/01/09 Javascript
vue中子组件传递数据给父组件的讲解
2019/01/27 Javascript
python使用win32com在百度空间插入html元素示例
2014/02/20 Python
利用python实现xml与数据库读取转换的方法
2017/06/17 Python
python使用super()出现错误解决办法
2017/08/14 Python
matplotlib中legend位置调整解析
2017/12/19 Python
python中使用%与.format格式化文本方法解析
2017/12/27 Python
python http基本验证方法
2018/12/26 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
mac使用python识别图形验证码功能
2020/01/10 Python
python如何删除文件、目录
2020/06/23 Python
如何使用 Flask 做一个评论系统
2020/11/27 Python
Python基于mediainfo批量重命名图片文件
2020/12/29 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
董事长职责范文
2013/11/08 职场文书
各营销点岗位职责范本
2014/03/05 职场文书
计算机应用专业自荐信
2014/07/05 职场文书
2014年教师节演讲稿
2014/09/03 职场文书
计生办班子群众路线教育实践活动个人对照检查材料思想汇报
2014/10/04 职场文书
初中生考试作弊检讨书
2014/12/14 职场文书
英文升职感谢信
2015/01/23 职场文书
2015年小学数学教研组工作总结
2015/05/21 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
2021/06/09 Vue.js
Win11 Build 22000.51版本文件资源管理器“命令栏”和上下文菜单有什么新变化?
2021/11/21 数码科技