Python sorted对list和dict排序


Posted in Python onJune 09, 2020

sorted语法

sorted(iterable, key=None, reverse=False)

参数说明:

 - iterable -- 可迭代对象。
 - key --主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
 - reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

返回:
 - 一个新list对象 

sorted对字典dict排序

①按键key排序

from operator import itemgetter
dict = {3: 'B', 1: 'A', 2: 'C'}

# 按key升序  .items()取得3个(key,value)
# lambda x: x[0]取(key,value)的key  即(3,1,2)
d1 = sorted(dict.items(), key=lambda x: x[0], reverse=False) # <class 'list'>

# 按key降序  itemgetter类似lambda
d2 = sorted(dict.items(), key=itemgetter(0), reverse=True) # <class 'list'>

# 输出
print(d1, type(d1)) # [(1, 'A'), (2, 'C'), (3, 'B')] <class 'list'>
print(d2, type(d2)) # [(3, 'B'), (2, 'C'), (1, 'A')] <class 'list'>

[(1, ‘A'), (2, ‘C'), (3, ‘B')] <class ‘list'>
[(3, ‘B'), (2, ‘C'), (1, ‘A')] <class ‘list'>

②按值value排序

from operator import itemgetter
dict = {3: 'B', 1: 'A', 2: 'C'}

# 按value升序  .items()取得3个(key,value)
# lambda x: x[1]取(key,value)的value  即('B','A','C')
d3 = sorted(dict.items(), key=lambda x: x[1], reverse=False) # <class 'list'>

# 按value降序  itemgetter类似lambda
d4 = sorted(dict.items(), key=itemgetter(1), reverse=True) # <class 'list'>

print(d3, type(d3)) # [(1, 'A'), (3, 'B'), (2, 'C')] <class 'list'>
print(d4, type(d4)) # [(2, 'C'), (3, 'B'), (1, 'A')] <class 'list'>

[(1, ‘A'), (3, ‘B'), (2, ‘C')] <class ‘list'>
[(2, ‘C'), (3, ‘B'), (1, ‘A')] <class ‘list'>

sorted排序list

①按一种规则排序list

from operator import itemgetter
data = [('c', 3, 'Apple'), ('d', 1, 'Cat'), ('a', 2, 'Banana')]
# 根据字母升序
print(sorted(data, key=lambda x: x[0], reverse=False)) # <class 'list'>
# 根据数字升序
print(sorted(data, key=lambda x: x[1], reverse=False)) # <class 'list'>
# 根据单词升序
print(sorted(data, key=lambda x: x[2], reverse=False)) # <class 'list'>

[('a', 2, 'Banana'), ('c', 3, 'Apple'), ('d', 1, 'Cat')]
[('d', 1, 'Cat'), ('a', 2, 'Banana'), ('c', 3, 'Apple')]
[('c', 3, 'Apple'), ('a', 2, 'Banana'), ('d', 1, 'Cat')]

②按多种规则排序list

# 先按照成绩降序排序,相同成绩的按照名字升序排序:
d1 = [{'name':'alice', 'score':38}, {'name':'bob', 'score':18}, {'name':'darl', 'score':28}, {'name':'christ', 'score':28}]
l = sorted(d1, key=lambda x:(-x['score'], x['name']))
print(l)

[{'name': 'alice', 'score': 38}, {'name': 'christ', 'score': 28}, {'name': 'darl', 'score': 28}, {'name': 'bob', 'score': 18}]

sorted排序list和dict的混合

 先看看我们排序的有哪些类型的数据结构

#### 二维list排序
l1 = [['Bob', 95.00, 'A'], ['Alan', 86.0, 'C'], ['Mandy', 82.5, 'A'], ['Rob', 86, 'E']]

#### list中混合字典
l2 = [{'name':'alice', 'score':38}, {'name':'bob', 'score':18}, {'name':'darl', 'score':28}, {'name':'christ', 'score':28}]

#### 字典中混合list
d1 = {'Li': ['M', 7], 'Zhang': ['E', 2], 'Wang': ['P', 3], 'Du': ['C', 2], 'Ma': ['C', 9], 'Zhe': ['H', 7]}

#### 对字典中的多维list进行排序
d2 = {
  'Apple': [['44', 88], ['11', 33], ['22', 88]],
  'Banana': [['55', 43], ['11', 68], ['44', 22]],
  'Orange':[['22', 22], ['55', 41], ['44', 42], ['33', 22]]
}

二维list排序

from operator import itemgetter
l1 = [['Bob', 95.00, 'A'], ['Alan', 86.0, 'C'], ['Mandy', 82.5, 'A'], ['Rob', 86, 'E']]
# 按先按成绩号升序,再按成绩数值升序
print(sorted(l1, key=itemgetter(2, 1), reverse=False))
# 按先按成绩号升序,再按成绩数值降序序
print(sorted(l1, key=lambda x:(x[2], -x[1]), reverse=False))

[[‘Mandy', 82.5, ‘A'], [‘Bob', 95.0, ‘A'], [‘Alan', 86.0, ‘C'], [‘Rob', 86, ‘E']]
[[‘Bob', 95.0, ‘A'], [‘Mandy', 82.5, ‘A'], [‘Alan', 86.0, ‘C'], [‘Rob', 86, ‘E']]

2. list中混合字典

from operator import itemgetter
# 先按照成绩降序排序,相同成绩的按照名字升序排序:
l2 = [{'name':'alice', 'score':38}, {'name':'bob', 'score':18}, {'name':'darl', 'score':28}, {'name':'christ', 'score':28}]
print(sorted(l2, key=lambda x:(-x['score'], x['name'])))
print(sorted(l2, key=itemgetter('score', 'name')))

[{‘name': ‘alice', ‘score': 38}, {‘name': ‘christ', ‘score': 28}, {‘name': ‘darl', ‘score': 28}, {‘name': ‘bob', ‘score': 18}]
[{‘name': ‘bob', ‘score': 18}, {‘name': ‘christ', ‘score': 28}, {‘name': ‘darl', ‘score': 28}, {‘name': ‘alice', ‘score': 38}]

3. 字典中混合list

d1 = {'Li': ['M', 7], 'Zhang': ['E', 2], 'Wang': ['P', 3], 'Du': ['C', 2], 'Ma': ['C', 9], 'Zhe': ['H', 7]}
# sort返回的是list,如果需要转为dict,再sorted前面套一个dict()就可以了
print(sorted(d1.items(), key=lambda x:(x[1][1], -ord(x[1][0]) ))) # 对字符比较需要ord。如果是'123'字符串数字可以使用int。
# print(sorted(d1.items(), key=lambda x:(x[1][1], -ord(x[1][0]) )))

[(‘Zhang', [‘E', 2]), (‘Du', [‘C', 2]), (‘Wang', [‘P', 3]), (‘Li', [‘M', 7]), (‘Zhe', [‘H', 7]), (‘Ma', [‘C', 9])]

4. 对字典中的多维list进行排序

d2 = {
  'Apple': [['44', 88], ['11', 33], ['22', 88]],
  'Banana': [['55', 43], ['11', 68], ['44', 22]],
  'Orange':[['22', 22], ['55', 41], ['44', 42], ['33', 22]]
}
for key, value in d2.items():
  d2[key] = sorted(value, key=lambda x:(x[1], -int(x[0]))) # 按list第二列升序,相同则按第一列降序,参考二维list排序
print(d2)

{‘Apple': [[‘11', 33], [‘44', 88], [‘22', 88]], ‘Banana': [[‘44', 22], [‘55', 43], [‘11', 68]], ‘Orange': [[‘33', 22], [‘22', 22], [‘52', 41], [‘44', 42]]}

到此这篇关于Python sorted对list和dict排序的文章就介绍到这了,更多相关Python sorted对list和dict排序内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python字符串替换实例分析
May 11 Python
在Python程序中操作文件之flush()方法的使用教程
May 24 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
Dec 25 Python
Python将list中的string批量转化成int/float的方法
Jun 26 Python
pytorch中tensor的合并与截取方法
Jul 26 Python
Django框架模板介绍
Jan 15 Python
在Python中通过getattr获取对象引用的方法
Jan 21 Python
Python实现的大数据分析操作系统日志功能示例
Feb 11 Python
Python使用pyautocad+openpyxl处理cad文件示例
Jul 11 Python
pytorch 使用加载训练好的模型做inference
Feb 20 Python
如何使用python切换hosts文件
Apr 29 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
Dec 29 Python
python初步实现word2vec操作
Jun 09 #Python
Python生成随机验证码代码实例解析
Jun 09 #Python
在python下实现word2vec词向量训练与加载实例
Jun 09 #Python
Python实现寻找回文数字过程解析
Jun 09 #Python
pycharm 关掉syntax检查操作
Jun 09 #Python
Python控制台实现交互式环境执行
Jun 09 #Python
使用pycharm和pylint检查python代码规范操作
Jun 09 #Python
You might like
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
php实现网页缓存的工具类分享
2015/07/14 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
PHP学习笔记之session
2018/05/06 PHP
jQuery 源码分析笔记(6) jQuery.data
2011/06/08 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
javascript基本包装类型介绍
2015/04/10 Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
2016/09/04 Javascript
Javascript获取background属性中url的值
2016/10/17 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
2017/01/21 Javascript
JavaScript实现换肤功能
2017/09/15 Javascript
详解Angular模板引用变量及其作用域
2018/11/23 Javascript
layuiAdmin循环遍历展示商品图片列表的方法
2019/09/16 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
koa中间件核心(koa-compose)源码解读分析
2020/06/15 Javascript
jquery实现图片放大镜效果
2020/12/23 jQuery
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2019/03/30 Python
Python中psutil的介绍与用法
2019/05/02 Python
基于python实现matlab filter函数过程详解
2020/06/08 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
实体的生命周期
2013/08/31 面试题
给儿子的表扬信
2014/01/15 职场文书
学雷锋月活动总结
2014/04/25 职场文书
应届毕业生求职信
2014/05/26 职场文书
大型主题婚礼活动策划方案
2014/09/15 职场文书
寒暑假实习证明书模板
2014/11/29 职场文书
农村党员干部承诺书
2015/05/04 职场文书
jquery插件实现搜索历史
2021/04/24 jQuery
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫
SQL Server #{}可以防止SQL注入
2022/05/11 SQL Server
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server