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中pycurl库的用法实例
Sep 30 Python
Python处理RSS、ATOM模块FEEDPARSER介绍
Feb 18 Python
在Django中使用Sitemap的方法讲解
Jul 22 Python
Python 装饰器使用详解
Jul 29 Python
python机器学习实战之最近邻kNN分类器
Dec 20 Python
20个常用Python运维库和模块
Feb 12 Python
CentOS7下python3.7.0安装教程
Jul 30 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
Aug 10 Python
python各层级目录下import方法代码实例
Jan 20 Python
git查看、创建、删除、本地、远程分支方法详解
Feb 18 Python
Django限制API访问频率常用方法解析
Oct 12 Python
python re模块和正则表达式
Mar 24 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 在文件指定行插入数据的代码
2010/05/08 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
2016/07/18 PHP
关于Mozilla浏览器不支持innerText的解决办法
2011/01/01 Javascript
防止浏览器记住用户名及密码的简单实用方法
2013/04/22 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
2014/04/12 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
2016/01/19 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
vue权限问题的完美解决方案
2019/05/08 Javascript
功能完善的小程序日历组件的实现
2020/03/31 Javascript
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
2020/04/27 Javascript
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
Python及PyCharm下载与安装教程
2017/11/18 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
详解python中list的使用
2019/03/15 Python
python远程邮件控制电脑升级版
2019/05/23 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
python 解决selenium 中的 .clear()方法失效问题
2020/09/01 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
英国口碑最好的的维他命胶囊品牌:Myvitamins(有中文站)
2016/12/03 全球购物
初级会计求职信范文
2014/02/15 职场文书
社区文化建设方案
2014/05/02 职场文书
创先争优活动心得体会
2014/09/04 职场文书
医生见习报告范文
2014/11/03 职场文书
节水倡议书
2015/01/19 职场文书
普宁寺导游词
2015/02/04 职场文书
党员评议自我评价
2015/03/03 职场文书
求职自荐信怎么写
2015/03/04 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
催款函范本大全
2015/06/24 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书
又涨知识了,自律到底多重要?
2019/06/27 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
浅析CSS在DevTools 中架构演变
2021/10/05 HTML / CSS
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers