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对字典列表多维数组排序相关推荐

  1. python中字典列表元组_Python中的列表和元组

    python中字典列表元组 Lists and tuples are arguably Python's most versatile, useful data types. You will fin ...

  2. Python中字典列表的使用:实现名片信息管理系统

    直接附上代码: # 名片信息管理系统 字典列表的使用# 输出打印信息 print(" 名片管理系统 ") print("="*50) print("1 ...

  3. python 元组 字典 列表 序列化与反序列化

    在python中,序列化是指把Python的对象编码转化为JSON格式的字符串:反序列化则是相反,是把JSON格式的字符串解码为Python数据对象.其中专门提供了JSON库来处理这个过程. 一.JS ...

  4. python定义字典列表_[Python基础]五、列表、元组和字典

    5.1 列表List(列表)是Python中最频繁的数据类型,在其他语言中叫数组 专门用于存储一串信息 列表用[]定义,数据之间使用逗号隔开 列表的索引从0开始 5.1.1列表常用操作 name_li ...

  5. python定义字典列表_Python基础语法(四)—列表、元组、字典、集合、字符串

    列表 基本概念列表是有序的元素集合,所有元素放在一对中括号中,用逗号隔开,没有长度限制: 列表索引值以0为开始值,-1为从未尾的开始位置. 列表可以使用+操作符进行拼接,使用*表示重复. 当列表元素增 ...

  6. python中字典是几维数据_Python 中的多维字典

    Python中的dict可以实现迅速查找.那么有没有像数组有二维数组一样,有二维的字典呢?比如我需要对两个关键词进行查找的时候.2D dict 可以通过 dict_2d = {'a': {'a': 1 ...

  7. python中字典是几维数据_详解Python字典数据类型

    字典的定义 dictionary(字典)是除列表以外 Python之中最灵活的数据类型. 字典同样可以用来存储多个数据,通常用于存储描述一个物体的相关信息. 和列表的区别:列表是有序的对象集合,字典是 ...

  8. 【python】字典列表筛选数据

    涉及使用filter与匿名函数lambda,列表推导,字典遍历知识. import sys import random reload(sys) sys.setdefaultencoding('utf- ...

  9. python将字典导入excel_python将字典列表导出为Excel文件的方法

    将如下的字典列表内容导出为Excel表格文件形式: 关于上图字典列表的写入,请参考文章:https://www.jb51.net/article/169088.htm python将字典列表导出为Ex ...

最新文章

  1. debian/ubuntu下安装java8
  2. php 编程祝新年快乐_AnyCodes:免费的在线编程神器
  3. Leetcode987 二叉树的垂序遍历
  4. 刘教授的Linux操作系统考试复习题
  5. 1470: 区间求最值(RMQ问题,ST算法模板)
  6. 方欣科技算法面试:蛇形矩阵2
  7. Servlet的运行方式
  8. Ros学习——roslaunch
  9. php自动发邮件系统,一个简单的自动发送邮件系统(二)_php基础
  10. channelfuture怎么拿到数据_SpringBoot2.x系列教程66--Spring Boot整合分布式事务之数据库事务回顾
  11. mysql防注入插件_mybatis-plus插件使用的一些问题
  12. wifislax14.0final reaver穷举PIN教程 wap,wps破解教程
  13. 干货!仓储规划设计方法论
  14. jspx页面用到的一些在值表达式中的运算符含义
  15. 系统加速精灵:全面提升CPU性能,让你的系统跑的更快!
  16. 怎样进行https证书检查
  17. 使用DOM技术操纵文档
  18. c++ private、protect、public、virtual详细说明***
  19. Cisco Packet Tracer的简单使用
  20. content root修改问题

热门文章

  1. winform 画图的放大和缩小_CAD绘图区域突然不能放大或缩小了怎么办?【AutoCAD教程】...
  2. html5返回上一页不刷新,javascript解决在safari浏览器中使用history.back()返回上一页后页面不会刷新的问题...
  3. 枚举类型为什么能实现单例模式?
  4. 通过ssh代理连接内网MySQL
  5. JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库
  6. python中slice 和 indices使用
  7. torch.triu_indices
  8. 谐云课堂 | 一文详解分布式改造理论与实战
  9. 根据月份和天来去查找对应的星座
  10. 热转印标签印刷机行业分析-热转印标签印刷机产能、产量、产能利用率及发展趋势