飘逸的python - 多条件排序及itemgetter的应用
来源:互联网 发布:形容网络发达的句子 编辑:程序博客网 时间:2024/05/23 07:24
曾经客户端的同事用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 itemgetterprint sorted(teamitems ,key = itemgetter('P','GD','GS','GA'),reverse=True)
- 飘逸的python - 多条件排序及itemgetter的应用
- 飘逸的python - 有的升序有的降序的情况下怎么多条件排序
- 飘逸的python
- 飘逸的python
- 飘逸的python
- 飘逸的python
- 飘逸的python - 带权随机算法及在抽奖中的应用
- 【飘逸的Python】 在Apache2中部署Tornado应用
- 飘逸的python - property及实现lazy property
- 飘逸的python - 赛程表算法
- 飘逸的python - 赛程表算法
- 飘逸的python - and_or大法
- 飘逸的python - 写个端口扫描器及各种并发尝试(多线程/多进程/gevent/futures)
- Python: sorted,operator.itemgetter的用法
- python——使用itemgetter和sorted对列表内的元素进行排序
- 飘逸的python - 常见的几个坑
- 飘逸的python - __dict__的妙用
- 飘逸的python - 优雅的执行程序
- [视频处理] 使用copy命令合并视频
- C++、GDAL创建shapefile,并向矢量文件中添加网格
- spoj 147
- 低成本MOS管下管驱动电路原理分析
- Linux上iptables防火墙的基本应用教程
- 飘逸的python - 多条件排序及itemgetter的应用
- 杭电1159-Common Subsequence
- C#学习笔记02:程序结构
- kinetis晶体谐振器到底要不要加电容和电阻
- ::Coinitialize and ::CoUninitialize
- shell笔记(三)——其他循环结构
- poj 1679 Prim判断次短路
- vs2010添加TSTCON( ActiveX Control Test Container )工具
- MOS管构成的简易双向电平转换电路