多条件排序及itemgetter的应用曾经客户端的同事用as写一大堆代码来排序,在得知Python排序往往只需要一行,惊讶无比,遂对python产生浓厚的兴趣。

之前在做足球的积分榜的时候需要用到多条件排序,如果积分相同,则按净胜球,再相同按进球数,再相同按失球数。

即按积分P、净胜球GD、进球GS、失球GA这样的顺序。

在python中,排序非常方便,排序的参数主要有key、reverse。参数cmp不建议使用了,在python3.0被移除了,用参数key代替。

对于多条件排序,也非常简单,只需要记住下面这句话就行。 即参数key指定的函数返回一个元组,多条件排序的顺序将按照元组的顺序。

看了下面的代码你就明白了,下面是2010世界杯小组赛A组的积分榜。

teamitems = [{'team':'France' , 'P':1 , 'GD':-3 , 'GS':1 , 'GA':4},

{'team':'Uruguay' , 'P':7 , 'GD':4 , 'GS':4 , 'GA':0},

{'team':'SouthAfrica' , 'P':4 , 'GD':-2 , 'GS':3 , 'GA':5},

{'team':'Mexico' , 'P':4 , 'GD':1 , 'GS':3 , 'GA':2}]

print sorted(teamitems ,key = lambda x:(x['P'],x['GD'],x['GS'],x['GA']),reverse=True)

输出

[{'P': 7, 'GD': 4, 'GS': 4, 'GA': 0, 'team': 'Uruguay'},

{'P': 4, 'GD': 1, 'GS': 3, 'GA': 2, 'team': 'Mexico'},

{'P': 4, 'GD': -2, 'GS': 3, 'GA': 5, 'team': 'SouthAfrica'},

{'P': 1, 'GD': -3, 'GS': 1, 'GA': 4, 'team': 'France'}]

即小组排名是乌拉圭、墨西哥、南非、法国。

不过这样一个个取字典的键值有点啰嗦,用itemgetter更简洁优雅,上面那句代码可以用如下替换。

from operator import itemgetter

print sorted(teamitems ,key = itemgetter('P','GD','GS','GA'),reverse=True)

有的升序有的降序的情况下怎么多条件排序之前在统计导出各区服玩家消费的时候需要进行升序降序混搭的多条件排序。

需求是这样的。区服从小到大排,如果区服相同,则按消费从大到小排。

实现方法是利用python的sort算法是稳定排序,对数据进行多次排序,先排次要条件,后排主要条件。

还有一种更简洁的一行流的方法,不过只有当待排数据是数值的时候才有效。此方法利用相反数的性质,在前面加个负号。

下面上代码。

#假设数据如下。

data = '''''

区服,玩家id,累积消费

3,a,2380

1,b,11900

4,e,3250

1,k,100

4,j,599

2,m,872

3,f,5560

1,y,2500

'''

items = [x.split(',') for x in filter(None,data.split('\n'))[1:]] #去掉空行和忽略首行并把字符串转成二维数组

#方法一

items.sort(key=lambda x:int(x[2]),reverse=True)#先排消费

items.sort(key=lambda x:int(x[0]))#然后排区服

print '\n'.join([','.join(x) for x in items])

print '-----------'

#方法二

items = sorted(items,key=lambda x:(int(x[0]),-int(x[2])))

print '\n'.join([','.join(x) for x in items])

python 多条件 选择 算法_浅析Python中的多条件排序实现相关推荐

  1. python实现冒泡排序完整算法_利用python实现冒泡排序算法实例代码

    利用python实现冒泡排序算法实例代码 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数 ...

  2. 利用python语言实现分类算法_使用python实现kNN分类算法

    k-近邻算法是基本的机器学习算法,算法的原理非常简单: 输入样本数据后,计算输入样本和参考样本之间的距离,找出离输入样本距离最近的k个样本,找出这k个样本中出现频率最高的类标签作为输入样本的类标签,很 ...

  3. python字典嵌套字典构造_浅析python 字典嵌套

    为什么需要嵌套? 有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套 .你可以在列表中嵌套字典.在字典中嵌套列表甚至在字典中嵌套字典. 字典列表 例如:字典alien_0包含 ...

  4. python 多条件 选择 算法_python部署python算法 - 快速寻找满足条件的两个数

    题目前提是一定存在这样两个数 解法一就不写了...一般想不到吧 一开始想到的是解法二最后的用hash表 (其实是想到创建一个跟target一样大的数组啦..存在就写入index,但是要全部找出,那得二 ...

  5. python 定时执行 爬虫 模块_浅析python实现scrapy定时执行爬虫

    项目需要程序能够放在超算中心定时运行,于是针对scrapy写了一个定时爬虫的程序main.py ,直接放在scrapy的存储代码的目录中就能设定时间定时多次执行. 最简单的方法:直接使用Timer类 ...

  6. python实现ocr识别算法_基于Python的OCR实现示例

    摘要: 近几天在做一个东西,其中需要对图像中的文字进行识别,看了前辈们的文章,找到两个较简单的方法:使用python的pytesseract库和调用百度AI平台接口.写下这篇文章做一个比较简短的记录和 ...

  7. anaconda中的python如何进行关联分析_浅析python,PyCharm,Anaconda三者之间的关系

    一.它们是什么? Python是一种跨平台的计算机程序设计语言,简单来说,python就是类似于C,Java,C++等,一种编程语言. 2.Anaconda Anaconda指的是一个开源的Pytho ...

  8. python 短进程优先算法_黄哥Python:图深度优先算法(dfs)

    深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法.沿着树的深度遍历树的节点,尽可能深的搜索树的分支.当节点v的所在边都己被探寻过,搜索将回溯到发现 ...

  9. python闭包的延迟绑定_浅析Python的闭包和延迟绑定

    def multipliers(): return [lambda x : i * x for i in range(4)] print [m(2) for m in multipliers()] 你 ...

最新文章

  1. 利用OWC创建图表的完美解决方案
  2. 那位五十多岁的创业者给我的启示!
  3. 域控服务器发生w32time错误
  4. 【问链-Eos公开课】第四课 EOS 的钱包创建、导入私钥
  5. SpringBoot2 整合 Zookeeper组件,管理架构中服务协调
  6. SSM框架(Spring + Spring MVC + Mybatis)搭建
  7. 项目使用线程池_并发编程系列1:线程池的架构实现、大小配置、及四种线程池使用...
  8. 计算机管理文件的教学设计,《管理计算机中的文件》教学设计文件.doc
  9. python的Singleton模式实现
  10. 华为网络拒绝接入_为何华为手机网络拒绝接入
  11. html与js的相互转化,JS和HTML互转
  12. 自己实现SDIO wifi Marvell8801/Marvell88w8801驱动 介绍(一) ---- 芯片介绍
  13. 网络摄像头IPC国标GB28181协议国标安防视频流媒体平台EasyGBS视频流不上线排查步骤
  14. 软工网络15团队作业7——Alpha冲刺之事后诸葛亮
  15. 如何开发一个小程序游戏?
  16. win10在电脑已经连接WIFI的情况下查询到WiFi密码(不方便询问或没有办法获得密码的时候)
  17. SQL优化--not in和or出的问题
  18. Hdoj 2190.悼念512汶川大地震遇难同胞——重建希望小学 题解
  19. 【MySQL】单表访问之索引合并
  20. 美国校园最in俗语大全

热门文章

  1. 最长升序子串1231
  2. select ... into ... 与 insert into .... select .... 语句
  3. 如何保证添加自定义对象元素的唯一性
  4. rserve php,使用Rserve远程执行R脚本
  5. XMLDictionary iOS的XML处理包
  6. asp.net 文本框显示xml格式数据_Excel 办公小技巧,查找和替换数据,您值得拥有...
  7. php实现git服务器,如何搭建和配置Git服务器
  8. linux 状态码的意义,HTTP状态码是什么?常见的状态码描述都有什么?
  9. 在HTML标签中 lt h5 gt 表示,HTML lt;blockquotegt; 标签
  10. execve系统调用_Linux系统编程——进程替换:exec 函数族