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() ...
随机推荐
- ML Pipelines管道
ML Pipelines管道 In this section, we introduce the concept of ML Pipelines. ML Pipelines provide a uni ...
- JUC 并发编程--03, 深刻理解锁, 8 锁现象,
如何判断锁的是谁? 永远知道是什么锁, 线程8锁:就是关于锁的8个问题 问题1: public class LockDemo01 { public static void main(String[] ...
- Git学习笔记(快速上手)
Git学习 1. 基本使用 安装成功后在开始菜单中会有Git项,菜单下有3个程序:任意文件夹下右键也可以看到对应的程序! Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多 Git ...
- Mybatis 中经典的 9 种设计模式!面试可以吹牛了
虽然我们都知道有23个设计模式,但是大多停留在概念层面,真实开发中很少遇到.Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式. Mybatis至少 ...
- CVPR2021|一个高效的金字塔切分注意力模块PSA
前言: 前面分享了一篇<继SE,CBAM后的一种新的注意力机制Coordinate Attention>,其出发点在于SE只引入了通道注意力,CBAM的空间注意力只考虑了局部区域的信息 ...
- C#中使用ffmpeg合并视频
首先将最新的ffmpeg.exe放到debug路径下,下载地址 http://www.ffmpeg.org/download.html 然后调用此方法 public void CombineMp4Wi ...
- 痞子衡嵌入式:超级下载算法RT-UFL v1.0发布,附J-Link下安装教程
痞子衡主导的"学术"项目 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计> 历时 8 个月终于迎来了 v1.0 版发布,因为是第一个正式版,为了保证质 ...
- Ubuntu18.04下安装Docker并配置SSL证书加密远程连接
Docker下载与安装 下载安装包 国内网络连接docker镜像还是比较慢的,这里推荐直接下载docker镜像,Ubuntu镜像下载路径为:https://download.docker.com/li ...
- 腾讯云TKE-基于 Cilium 统一混合云容器网络(下)
前言 在 腾讯云TKE - 基于 Cilium 统一混合云容器网络(上) 中,我们介绍 TKE 混合云的跨平面网络互通方案和 TKE 混合云 Overlay 网络方案.公有云 TKE 集群添加第三方 ...
- 11 监控MySQL主从状态是否异常
#!/bin/bash source /etc/profile # 主从同步 # master:binlog # slave:relaylog # 写->master->binlog< ...