Python对字典列表多维数组排序
Python的排序方法一般有两种一种是内建函数sorted 一种是列表才具有的方法sort ,sorted 是在容器外排序会生成一个新的容器,而sort仅仅是列表的一个方法,没有返回值不会生成一个新的容器。
两种方法具体实现sort、sorted 一下是源码:
def sorted(iterable: Iterable[_T], *,key: Optional[Callable[[_T], Any]] = ...,reverse: bool = ...) -> List[_T]: ...def sort(self, *, key: Optional[Callable[[_T], Any]] = ..., reverse: bool = ...) -> None: ...
1 、对简单的一维数组列表进行排序
L = [1, 2, 5, 4, 9, 8, 7, 6] # 单列表 对L进行排序,如果参数reverse不填,默认是False递增排序-->升序.
不能直接print(L.sort()) 会返回一个None,因为sort没有返回值 返回的是None,是直接修改的元数据
L.sort()
print("sort():", L)LL = sorted(L, reverse=True) # 对L再进行排序, reverse=True是递减排序也就是降序
print("sorted:", LL)
打印结果:
sort(): [1, 2, 4, 5, 6, 7, 8, 9]
sorted: [9, 8, 7, 6, 5, 4, 2, 1]
2、对多为数组进行排序类似于数据库中的行列
"""
对L2按照元组中的第二个元素进行排序,不能直接用sorted()或者L2.sort(),因为L2属于是一个多为数组了。
"""
L2 = [("a", 1), ('b', 4), ('d', 2), ('c', 3)] # 类型与数据库的行列# 上诉两种方法都不行,所有就要用到key值了
L2.sort(key=lambda x: x[0], reverse=True) # 按照元组的第一个数排
print("sort():", L2)LL2 = sorted(L2, key=lambda x: x[1], reverse=True) # 按照元组的第二个数排
print("sorted():", LL2)
打印结果:
sort(): [('d', 2), ('c', 3), ('b', 4), ('a', 1)]
sorted(): [('b', 4), ('c', 3), ('d', 2), ('a', 1)]
3、对列表中含有字典的列表按字典的key或者valu进行排序
import operator"""
对L3按照字典中的年龄进行排序
"""
L3 = [{'name': '李四', 'age': 22, 'sex': '男'}, {'name': '张三', 'age': 21, 'sex': '男'},{'name': '李华', 'age': 30, 'sex': '女'}, {'name': '李华', 'age': 30, 'sex': '男'}] # Json数据
# 1 使用匿名函数 lambda
L3.sort(key=lambda x: x['age'])
print(L3)LL3 = sorted(L3, key=lambda x: x['age'])
print(LL3)
"""note 如果需要多级排序,相应调整key值 key=lambda x:(x['age'],x['sex'])"""# 使用operator.itemgetter 函数
"""
Return a callable object that fetches the given item(s) from its operand.
After f = itemgetter(2), the call f(r) returns r[2].
After g = itemgetter(2, 5, 3), the call g(r) returns (r[2], r[5], r[3])
"""LLL3 = sorted(L3, key=operator.itemgetter('name'), reverse=True)
print(LLL3)
打印结果:
sort(): [{'name': '张三', 'age': 21, 'sex': '男'}, {'name': '李四', 'age': 22, 'sex': '男'}, {'name': '李华', 'age': 30, 'sex': '女'}, {'name': '李华', 'age': 30, 'sex': '男'}]
sorted() [{'name': '张三', 'age': 21, 'sex': '男'}, {'name': '李四', 'age': 22, 'sex': '男'}, {'name': '李华', 'age': 30, 'sex': '女'}, {'name': '李华', 'age': 30, 'sex': '男'}]
4、对字典进行排序使用 key,value
因为字典是哈希散列,所以Python中的字典是无序的,sort是字典的方法,所以不可以对字典进行排序,可以使用sorted
import operator"""
对dict1字典进行排序
"""dict1 = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(dict1.items(), key=lambda x: x[0], reverse=True)
print("lambda:", dict(sorted_x))
sorted1_x = sorted(dict1.items(), key=operator.itemgetter(0))
print("operator:", dict(sorted1_x))
打印结果:
lambda: {4: 3, 3: 4, 2: 1, 1: 2, 0: 0}
operator: {0: 0, 1: 2, 2: 1, 3: 4, 4: 3}
5、扩展:operator
要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。
a = [1,2,3]
b=operator.itemgetter(1) # 定义函数b,获取对象的第1个域的值> b(a)
2
b=operator.itemgetter(1,0) # 定义函数b,获取对象的第1个域和第0个的值
b(a)
(2, 1)
Python对字典列表多维数组排序相关推荐
- python中字典列表元组_Python中的列表和元组
python中字典列表元组 Lists and tuples are arguably Python's most versatile, useful data types. You will fin ...
- Python中字典列表的使用:实现名片信息管理系统
直接附上代码: # 名片信息管理系统 字典列表的使用# 输出打印信息 print(" 名片管理系统 ") print("="*50) print("1 ...
- python 元组 字典 列表 序列化与反序列化
在python中,序列化是指把Python的对象编码转化为JSON格式的字符串:反序列化则是相反,是把JSON格式的字符串解码为Python数据对象.其中专门提供了JSON库来处理这个过程. 一.JS ...
- python定义字典列表_[Python基础]五、列表、元组和字典
5.1 列表List(列表)是Python中最频繁的数据类型,在其他语言中叫数组 专门用于存储一串信息 列表用[]定义,数据之间使用逗号隔开 列表的索引从0开始 5.1.1列表常用操作 name_li ...
- python定义字典列表_Python基础语法(四)—列表、元组、字典、集合、字符串
列表 基本概念列表是有序的元素集合,所有元素放在一对中括号中,用逗号隔开,没有长度限制: 列表索引值以0为开始值,-1为从未尾的开始位置. 列表可以使用+操作符进行拼接,使用*表示重复. 当列表元素增 ...
- python中字典是几维数据_Python 中的多维字典
Python中的dict可以实现迅速查找.那么有没有像数组有二维数组一样,有二维的字典呢?比如我需要对两个关键词进行查找的时候.2D dict 可以通过 dict_2d = {'a': {'a': 1 ...
- python中字典是几维数据_详解Python字典数据类型
字典的定义 dictionary(字典)是除列表以外 Python之中最灵活的数据类型. 字典同样可以用来存储多个数据,通常用于存储描述一个物体的相关信息. 和列表的区别:列表是有序的对象集合,字典是 ...
- 【python】字典列表筛选数据
涉及使用filter与匿名函数lambda,列表推导,字典遍历知识. import sys import random reload(sys) sys.setdefaultencoding('utf- ...
- python将字典导入excel_python将字典列表导出为Excel文件的方法
将如下的字典列表内容导出为Excel表格文件形式: 关于上图字典列表的写入,请参考文章:https://www.jb51.net/article/169088.htm python将字典列表导出为Ex ...
最新文章
- debian/ubuntu下安装java8
- php 编程祝新年快乐_AnyCodes:免费的在线编程神器
- Leetcode987 二叉树的垂序遍历
- 刘教授的Linux操作系统考试复习题
- 1470: 区间求最值(RMQ问题,ST算法模板)
- 方欣科技算法面试:蛇形矩阵2
- Servlet的运行方式
- Ros学习——roslaunch
- php自动发邮件系统,一个简单的自动发送邮件系统(二)_php基础
- channelfuture怎么拿到数据_SpringBoot2.x系列教程66--Spring Boot整合分布式事务之数据库事务回顾
- mysql防注入插件_mybatis-plus插件使用的一些问题
- wifislax14.0final reaver穷举PIN教程 wap,wps破解教程
- 干货!仓储规划设计方法论
- jspx页面用到的一些在值表达式中的运算符含义
- 系统加速精灵:全面提升CPU性能,让你的系统跑的更快!
- 怎样进行https证书检查
- 使用DOM技术操纵文档
- c++ private、protect、public、virtual详细说明***
- Cisco Packet Tracer的简单使用
- content root修改问题
热门文章
- winform 画图的放大和缩小_CAD绘图区域突然不能放大或缩小了怎么办?【AutoCAD教程】...
- html5返回上一页不刷新,javascript解决在safari浏览器中使用history.back()返回上一页后页面不会刷新的问题...
- 枚举类型为什么能实现单例模式?
- 通过ssh代理连接内网MySQL
- JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库
- python中slice 和 indices使用
- torch.triu_indices
- 谐云课堂 | 一文详解分布式改造理论与实战
- 根据月份和天来去查找对应的星座
- 热转印标签印刷机行业分析-热转印标签印刷机产能、产量、产能利用率及发展趋势