python内置函数sorted()用法深入分析


Posted in Python onOctober 08, 2019

本文实例讲述了python内置函数sorted()用法。分享给大家供大家参考,具体如下:

列表对象提供了sort()方法支持原地排序,而内置函数sorted()不支持原地操作只是返回新的列表,并不对原列表进行任何修改。sorted()方法可以对列表、元组、字典、range对象等进行排序。列表的sort()方法和内置函数sorted()都支持key参数实现复杂排序要求。

#使用key来指定排序依据,先按姓名升序排序,姓名相同的按年龄降序排序
>>> persons = [{'name':'xuzm', 'age':10}, {'name':'xuzm2', 'age':20}, {'name':'xuzm4', 'age':40}, {'name':'xuzm3', 'age':30}]
>>> persons
[{'name': 'xuzm', 'age': 10}, {'name': 'xuzm2', 'age': 20}, {'name': 'xuzm4', 'age': 40}, {'name': 'xuzm3', 'age': 30}]
>>> print(sorted(persons, key=lambda x:(x['name'], -x['age'])))
[{'name': 'xuzm', 'age': 10}, {'name': 'xuzm2', 'age': 20}, {'name': 'xuzm3', 'age': 30}, {'name': 'xuzm4', 'age': 40}]
>>> phonebook = {'xuzm':'123', 'xuzm2':'456', 'xuzm3':'789'}
>>> from operator import itemgetter
>>> sorted(phonebook.items(), key=itemgetter(1))  #按字典元素的值默认进行升序排列
[('xuzm', '123'), ('xuzm2', '456'), ('xuzm3', '789')]
>>> sorted(phonebook.items(), key=itemgetter(0),reverse=True)   #按字典中元素的键进行降序排序
[('xuzm3', '789'), ('xuzm2', '456'), ('xuzm', '123')]
>>> gameresult = [['Bob', 95.0, 'A'], ['Alan', 86.0, 'C'], ['Mandy', 83.5, 'A'], ['Rob', 89.3, 'E']]
>>> sorted(gameresult, key=itemgetter(0, 1))  #按姓名升序排列,姓名相同的按分数进行升序排列
[['Alan', 86.0, 'C'], ['Bob', 95.0, 'A'], ['Mandy', 83.5, 'A'], ['Rob', 89.3, 'E']]
>>> sorted(gameresult, key=itemgetter(1, 0))  #按分数进行升序排列,分数相同的按姓名进行升序排列
[['Mandy', 83.5, 'A'], ['Alan', 86.0, 'C'], ['Rob', 89.3, 'E'], ['Bob', 95.0, 'A']]
>>> sorted(gameresult, key=itemgetter(2, 0))  #按等级升序排列,等级相同的按姓名进行升序排列
[['Bob', 95.0, 'A'], ['Mandy', 83.5, 'A'], ['Alan', 86.0, 'C'], ['Rob', 89.3, 'E']]
>>> gameresult = [{'name':'Bob', 'wins':10, 'losses':3, 'rating':75.0},
               {'name':'David', 'wins':3, 'losses':5, 'rating':57.0},
               {'name':'Carol', 'wins':4, 'losses':5, 'rating':57.0},
               {'name':'Patty', 'wins':9, 'losses':3, 'rating':72.8}]
>>> sorted(gameresult, key=itemgetter('wins', 'name'))  #按wins排列,wins相同的按name惊进行排列
[{'name': 'David', 'wins': 3, 'losses': 5, 'rating': 57.0}, {'name': 'Carol', 'wins': 4, 'losses': 5, 'rating': 57.0}, {'name': 'Patty', 'wins': 9, 'losses': 3, 'rating': 72.8}, {'name': 'Bob', 'wins': 10, 'losses': 3, 'rating': 75.0}]

根据另一个列表的顺序排列一个列表

>>> list1 = ["what", "I'm", "sorting", "by"]
>>> list2 = ["something", "else", "to", "sort"]
>>> pairs = zip(list1, list2)  #用zip对象压缩
>>> pairs = sorted(pairs)  #新列表按照list1进行排序
>>> pairs
[("I'm", 'else'), ('by', 'sort'), ('sorting', 'to'), ('what', 'something')]
>>> result = [x[1] for x in pairs]  #按新列表中list1的顺序筛选出新列表中的list2部分
>>> result
['else', 'sort', 'to', 'something']

更多关于Python相关内容可查看本站专题:《Python列表(list)操作技巧总结》、《Python字符串操作技巧汇总》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
分析用Python脚本关闭文件操作的机制
Jun 28 Python
win10系统中安装scrapy-1.1
Jul 03 Python
Python判断文件和字符串编码类型的实例
Dec 21 Python
100行Python代码实现自动抢火车票(附源码)
Jan 11 Python
Python 实现选择排序的算法步骤
Apr 22 Python
python 列表递归求和、计数、求最大元素的实例
Nov 28 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
Dec 19 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
Jan 22 Python
numpy.linspace函数具体使用详解
May 27 Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 Python
将自己的数据集制作成TFRecord格式教程
Feb 17 Python
Python控制台实现交互式环境执行
Jun 09 Python
Python使用tkinter模块实现推箱子游戏
Oct 08 #Python
python生成器推导式用法简单示例
Oct 08 #Python
python实现把二维列表变为一维列表的方法分析
Oct 08 #Python
python读文件的步骤
Oct 08 #Python
Django之使用celery和NGINX生成静态页面实现性能优化
Oct 08 #Python
Django中使用haystack+whoosh实现搜索功能
Oct 08 #Python
python 使用while写猜年龄小游戏过程解析
Oct 07 #Python
You might like
php fsockopen伪造post与get方法的详解
2013/06/14 PHP
php调用MySQL存储过程的方法集合(推荐)
2013/07/03 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
2016/01/15 PHP
Zend Framework实现将session存储在memcache中的方法
2016/03/22 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
事件模型在各浏览器中存在差异
2010/10/20 Javascript
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
通过jQuery源码学习javascript(二)
2012/12/27 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
输入框过滤非数字的js代码
2014/09/18 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
2016/09/21 Javascript
js实现tab切换效果
2017/02/16 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
2019/11/05 Javascript
vue 实现单选框设置默认选中值
2019/11/07 Javascript
vue-drawer-layout实现手势滑出菜单栏
2020/11/19 Vue.js
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
实例解析Python中的__new__特殊方法
2016/06/02 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
大学生找工作推荐信范文
2013/11/28 职场文书
岗位廉洁从政承诺书
2014/03/27 职场文书
给老婆的保证书
2015/01/16 职场文书
2015年建筑工作总结报告
2015/05/04 职场文书
酒店温馨提示语
2015/07/14 职场文书
情况说明书怎么写
2015/10/08 职场文书
家长对孩子的寒假评语
2015/10/09 职场文书
MySQL8.0升级的踩坑历险记
2021/11/01 MySQL
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android