不规则数据排序 Python sort sorted
sort
sort 是应用在list上的方法: list的sort方法返回的是对已经存在的列表进行操作,无返回值,
sort 有3个参数:
- cmp 比较函数,含2个参数,参数的值都是从可迭代对象中取出的,必须遵守大于返回1,等于返回0,小于返回-1
- key 比较函数,含1个参数,参数的值取自可迭代对象中,指定可迭代对象中的一个元素进行排序
- reverse 排序规则, bool值,默认False(升序),True(倒序)
看一个例子
1. 简单排序
L = [2, 3, 1]
# 升序排序
L.sort(reverse=False)
# 输出结果为
print L
>> [1, 2, 3]
2.key参数
L = [('a', 2), ('b', 1), ('c', 3), ('d', 4)]
# key 匿名函数(可以定义非匿名函数)形式 对迭代元素的 索引1号位进行排序
L.sort(key=lambda x:x[1], reverse=False)
# 输出结果为
print L
>> [('b', 1), ('a', 2), ('c', 3), ('d', 4)] # 以迭代元素的 索引1号为标准进行排序
3.cmp参数
- 利用cmp函数
L = [('a', 2), ('b', 1), ('c', 3), ('d', 4)] # cmp 匿名函数(可以定义非匿名函数)形式 对迭代元素的 索引1号位进行排序 L.sort(cmp=lambda x,y: cmp(x[1], y[1]), revserse=False) # 输出结果 print L >> [('b', 1), ('a', 2), ('c', 3), ('d', 4)] # 以迭代元素的 索引1号为标准进行排序
- 利用自定义函数
def cmp_func(x, y):x_num = x[1]y_num = y[1]if x_num > y_num:return 1elif x_num == y_num:return 0else:return -1L = [('a', 2), ('b', 1), ('c', 3), ('d', 4)] # cmp 匿名函数(可以定义非匿名函数)形式 对迭代元素的 索引1号位进行排序 L.sort(cmp=cmp_func, reverse=False) # 输出结果 print L >> [('b', 1), ('a', 2), ('c', 3), ('d', 4)] # 以迭代元素的 索引1号为标准进行排序
sorted
sorted 不同于 sort只能用于 list, sorted可以接受任意迭代对象,返回一个 新的 list类型的数据
sorted 有4个参数- iterable 任意迭代对象
- cmp 与sort使用类似
- key 同上
- reserver 同上
sorted 的使用与 sort一致 可参考sort进行操作
一个不规范的排序问题
需求: 有一部(以 安家
为例) 电视剧的 单集名称及其他信息,单集命名方式为: 01_安家; 02_安家… 其中掺杂这样的特别篇:
安家_特辑; 安家花絮; 安家_剧组轶事…等不规范的名字 数据格式如下:
"""变量解释: series_list 剧集列表 里面嵌套 单集信息字典"""
series_list = [
{'video_id': 111,
'video_name': '01_安家',
'content_type': '电视剧'
},
{'video_id': 112,
'video_name': '02_安家',
'content_type': '电视剧'
},
{'video_id': 113,
'video_name': '03_安家',
'content_type': '电视剧'
},
{'video_id': 114,
'video_name': '安家_特辑',
'content_type': '电视剧'
},
{'video_id': 115,
'video_name': '安家_剧组轶事',
'content_type': '电视剧'
},
{'video_id': 116,
'video_name': '安家花絮',
'content_type': '电视剧'
},
]
问题: 请以单集索引(如 02_安家
的索引为 2)对该数组进行排序
"""分析: 一般的做法是进行遍历 取出需要进行排序的部分 剔除掉 无单集索引的 然后进行有索引单集的排序但是 这种方法实不可取"""
利用sort进行排序(sorted类似)
这个时候 sort的参数key已经满足不了复杂的逻辑处理了 所以考虑用 cmp参数来输入自定义的排序函数 如下
def rankDeal(x, y):try:x_num = x['video_name'].split('_')[0]except:x_num = 0try:y_num = y['video_name'].split('_')[0]except:y_num = 0if x_num > y_num:return 1elif x_num == y_num:return 0else:return -1
series_list.sort(cmp=rankDeal, reverse=True)
至此可以得到一个 单机索引倒序排序的 列表
最后提问
如何得到正序的列表,但是不规则命名的单集排序靠后呢?
不规则数据排序 Python sort sorted相关推荐
- R语言数据排序函数sort, order rank实战
R语言数据排序函数sort, order & rank实战 目录 R语言数据排序函数sort, order & rank实战 #sort vs. order vs. rank函数基础 ...
- python工资津贴的计算和排序-python sort、sorted高级排序技巧
Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. 1)排序基础 简单的升序排序是非常容易的.只需要调用sorte ...
- python 排序函数 sort sorted 简介
sort() 是Python列表的一个内置的排序方法,list.sort() 方法排序时直接修改原列表,返回None: sort() 是Python内置的一个排序函数,它会从一个迭代器返回一个排好序的 ...
- python 两种排序方法 sort() sorted()
python中有两种排序方法,list内置sort()方法或者python内置的全局sorted()方法 区别为: sort()方法对list排序会修改list本身,不会返回新list.sort()只 ...
- python中sorted函数逆序_Python中sorted函数的用法(转)
[Python] sorted函数 我们需要对List.Dict进行排序,Python提供了两个方法 对给定的List L进行排序, 方法1.用List的成员函数sort进行排序,在本地进行排序,不返 ...
- mongo数据排序和分页显示
数据排序 使用sort() 1 升序 -1 降序 自然排序 数据插入的顺序 $natural db.stu.drop(); db.stu.insert({"name":" ...
- Scott Mitchell 的ASP.NET 2.0数据教程之四十五::DataList和Repeater数据排序
Scott Mitchell 的ASP.NET 2.0数据教程之四十五::DataList和Repeater数据排序(一) 原文 | 下载本教程中的编码例子 | 下载本教程的PDF版 (以后比较长的部 ...
- python sort 多级排序_sort、sorted排序技巧(多级排序)
Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. 示例: from operator import itemge ...
- python中的排序方法都有哪些_Python中的排序方法sort(),sorted(),argsort()等
Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. 1)排序基础 简单的升序排序是非常容易的.只需要调用sorte ...
- python中sorted函数的作用_Python中排序方法sort、函数sorted的key参数的作用分析
从Python2.4开始,list.sort方法 和 sorted方法 都增加了一个 'key' 参数用来在进行比较之前指定每个列表元素上要调用的函数,将函数的返回值作为比较的依据. 那么怎么使用这个 ...
最新文章
- 剑指offer:面试题07. 重建二叉树
- 是知当代之士、驰骛之曹,书读纵横,则思诸侯之变
- PM2中无法开启ES6的解决方案
- 什么是数据中心,它们是如何变化的?
- 随笔记录(2019.7.10)
- Java中的ThreadPoolExecutor类
- 【LeetCode笔记】287. 寻找重复数(Java、快慢指针、原地、链表)
- 关于信噪比-draft
- call stack是什么错误_Go语言(golang)的错误(error)处理的推荐方案
- python%20是什么运算
- sql 表变量 临时表_何时使用SQL临时表与表变量
- linux的文件permission需要设置,否则会使用as3的urlrequest失败
- Spring-boot + Mybatis-plus 3.0-gamma 配置记录
- 最短路—Johnson算法(解决负权边,判断负权环)
- SOLIDWORKS流体分析为什么两栋楼之间会感觉风大
- js学习小计5-零宽断言
- go import 导入包名前加下划线 _
- linux查看隐藏大文件夹,Linux系统隐藏文件/文件夹操作教程
- Centos7.8下Nmap的安装与使用
- 这份春招攻略,希望大家可以收藏!