python_字典列表嵌套的排序问题
上一篇我们聊到python 字典和列表嵌套用法,这次我们聊聊字典和列表嵌套中的排序问题,这个在python基础中不会提到,但实际经常运用,面试中也喜欢问,我们娓娓道来。
在说组合排序之前,先来看看排序有哪些函数。
排序函数
使用排序有两个可用方法,分别是sort()和sorted()。
- sort():内置方法,会改变原来列表的排序、只适用于列表排序、所以效率高。
- sorted():全局,可迭代任意对象(字符串,元组,列表,字典等)
sort()使用例子:
简单的使用:
>>> L = [5,8,9,3,2,7]
>>> L.sort()
>>> print(L)
[2, 3, 5, 7, 8, 9]
指定关键字的排序:
## 列表嵌套列表
>>> user = [['Jone', '181', 30], ['Chan', '175', 26], ['Paul', '178', 22]]
>>> user.sort(key=lambda user: user[2])
>>> print(user)
[['Paul', '178', 22], ['Chan', '175', 26], ['Jone', '181', 30]]
也可以用cmp函数实现,不过python3.0后为了语言简化和统一,已经被彻底移除,这里不再赘述。
sorted()使用例子:
排序任意对象:
>>> A = 'Python'
>>> print(sorted(A))
['P', 'h', 'n', 'o', 't', 'y']
>>> print(A)
Python
>>>
>>> B = (3, 6, 7, 2, 9)
>>> print(sorted(B))
[2, 3, 6, 7, 9]
>>> print(B)
(3, 6, 7, 2, 9)
>>>
>>> C = [3, 6, 7, 2, 9]
>>> print(sorted(C))
[2, 3, 6, 7, 9]
>>> print(C)
[3, 6, 7, 2, 9]
>>>
根据键值的字典排序:
## 按照键值(value)排序
>>> D = {'a': '3', 'b': '6', 'c': '2'}
>>> ds = sorted(D.items(), key=lambda x: x[1], reverse=True)
>>> print(ds)
[('b', '6'), ('a', '3'), ('c', '2')]
## 按照键名(key)排序
>>> D = {'a': '3', 'b': '6', 'c': '2'}
>>> ds = sorted(D.items(), key=lambda x: x[0], reverse=True)
>>> print(ds)
[('c', '2'), ('b', '6'), ('a', '3')]
几种常见的排序场景
- 列表中嵌套字典,根据字典的值排序
## 使用lambda方式
>>> D = [{"name": '张三', 'score': 68}, {'name': '李四', 'score': 97}]
>>> ds = sorted(D, key=lambda x:x['score'], reverse=True)
>>> print(ds)
[{'name': '李四', 'score': 97}, {'name': '张三', 'score': 68}]
>>>
## 使用operator方式
>>> import operator
>>> D = [{"name": '张三', 'score': 68}, {'name': '李四', 'score': 97}]
>>> D.sort(key=operator.itemgetter('score'), reverse=True)
>>> print(D)
[{'name': '李四', 'score': 97}, {'name': '张三', 'score': 68}]
>>>
- 列表中嵌套字典,键不同的情况下对值进行排序
可以将列表中的字典先放入到一个大字典中,对整个字典进行排序,在排序完成后,再转换为列表包含字典的形式即可。
>>> from operator import itemgetter
>>> dict_list = [{"ming": 87}, {"mei": 93}, {"hua": 68}, {"jon": 75}, {"ston": 100}, {"jack": 56}]
>>> mid_dict = {key: value for x in dict_list for key, value in x.items()}
>>> mid_list = sorted(mid_dict.items(), key=itemgetter(1))
>>> print(mid_list)
[('jack', 56), ('hua', 68), ('jon', 75), ('ming', 87), ('mei', 93), ('ston', 100)]
>>> fin_list = [{x[0]: x[1]} for x in mid_list]
>>> print(fin_list)
[{'jack': 56}, {'hua': 68}, {'jon': 75}, {'ming': 87}, {'mei': 93}, {'ston': 100}]
>>>
- 字典嵌套字典的排序:
>>> D={10:{'aa':1,'bb':2},11:{'aa':2,'bb':0},12:{'aa':0,'bb':3}}
>>> ds=sorted(D.items(), key=lambda x: x[1]['bb'])
>>> print(ds)
[(11, {'aa': 2, 'bb': 0}), (10, {'aa': 1, 'bb': 2}), (12, {'aa': 0, 'bb': 3})]
>>>
---- 钢铁 648403020@qq.com 07.22.2021
参考文档
python排序sort()和sorted()区别:
https://zhuanlan.zhihu.com/p/59702850
列表排序方法sort、sorted技巧篇:
https://blog.csdn.net/bbbeoy/article/details/79741303
字典 列表 嵌套 复杂排序大全:
https://blog.csdn.net/ray_up/article/details/42084863
列表中嵌套字典,根据字典的值排序:
https://blog.csdn.net/Thomas0713/article/details/83028414
python_字典列表嵌套的排序问题的更多相关文章
- Python 字典 列表 嵌套 复杂排序大全
https://blog.csdn.net/ray_up/article/details/42084863 一: 字典排序 解析: 使用sorted 方法, 排序后的结果为一个元组. 可以字符串排序( ...
- python 元组 字符串 字典 列表嵌套练习题1
最近学习做的习题,直接复制过来 缩进就乱掉了,所以直接以图片方式上传,题目和答案一起
- Python 字典列表嵌套输入问题
- python 将列表嵌套字典的unicode字符串转换为str格式的字符串的方法
今天在进行django开发的过程中遇到了一个非常棘手的问题, 因为需求原因, 需要将一份数据存为json格式到数据库中, 如下面这种格式: list_1 = [{"name":&q ...
- Python 7 列表 for 字典,嵌套
列表: 基本格式:变量名 = [元素1,元素2,元素3] 创建:A = ['访客','admin',19] 或 A = list(['armin','admin',19]), 后者更倾向于转换为 ...
- python关于字典嵌套字典,列表嵌套字典根据值进行排序
python 对于字典嵌套字典, 列表嵌套字典排序 例:列表嵌套自字典:d = [{"name": '张三', 's': 68}, {'name': '李四', 's': 97}] ...
- python 字典和列表嵌套用法
python中字典和列表的使用,在数据处理中应该是最常用的,这两个熟练后基本可以应付大部分场景了.不过网上的基础教程只告诉你列表.字典是什么,如何使用,很少做组合说明. 刚好工作中采集promethe ...
- Python_字典及其操作
字典 概念 字典,Python基础数据类型之一,{}以键值对的形式存储数据. 以key : value 形式存储数据.例如,name 为 key,Laonanhai 为 value. dic = {' ...
- 总结day5 ---- ,字典的学习,增删改查,以及字典的嵌套, 赋值运算
内容大纲: 一:字典的定义 二:字典的增加 >1:按照key增加, 无则增加,有则覆盖 >2:setdefault() ,无则增加,有则不变 三:字典的删除 >1:pop() ...
随机推荐
- MindSpore:自动微分
MindSpore:自动微分 作为一款「全场景 AI 框架」,MindSpore 是人工智能解决方案的重要组成部分,与 TensorFlow.PyTorch.PaddlePaddle 等流行深度学习框 ...
- Docker与k8s的恩怨情仇(一)—成为PaaS前浪的Cloud Foundry
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 大家在工作中或许或多或少都接触过Docker,那你知道Docker以及容器化背后的原理到底是什么吗? 容器化 ...
- 在VScode 中使用RT-Thread Studio初体验
前言 工欲善其事,必先利其器,VScode是什么东东,想必大家都非常熟悉了,丰富的插件,有好的开发界面,是很多程序开发者的不二之选,RT-Thread竟然也开发了Vscode插件,真的是非常的nice ...
- 备份schema并排除大表到ASM磁盘上
1.查出占用空间比较大的表 select owner,segment_name,segment_type,bytes/1024/1024 mb from dab_segment where owner ...
- Hive和Spark分区策略
1.概述 离线数据处理生态系统包含许多关键任务,最大限度的提高数据管道基础设施的稳定性和效率是至关重要的.这边博客将分享Hive和Spark分区的各种策略,以最大限度的提高数据工程生态系统的稳定性和效 ...
- Docker安装运行Portainer
基本简介 Portainer是一个轻量级的docker环境管理UI,可以用来管理docker宿主机和docker swarm集群.他的轻量级,轻量到只要个不到100M的docker镜像容器就可以完整的 ...
- QPainter::begin: Paint device returned engine == 0, type: 1
开始 使用QPainter画图,需要继承QWidget,重写paintEvent()虚函数,在里面进行绘图. 或者可以考虑绘制到QImage或者QPixmap上面,然后在paintEvent()里面调 ...
- 29、vi和vim用法详解
vi类似于windows中的文本文件,用于普通的文本文件 vim:专家版的文件编辑器,用于shell程序型文件,带颜色,自检查语法 一般模式快捷键 O:光标到一行的首 $:光标到一行的尾 H:光标到整 ...
- Java数据库开发(三)之——补充
一.SQL注入与防范 使用PreparedStatement替代Statement对象,它提供了参数化SQL的方式 二.事务 定义 事务是并发控制的基本单位,满足ACID特征 原子性:atomicit ...
- hive学习笔记之九:基础UDF
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...