python内置函数sorted()深入

12人阅读 评论(0) 收藏 举报
分类:

列表对象提供了sort()方法支持原地排序,而内置函数sorted()不支持原地操作只是返回新的列表,并不对原列表进行任何修改。sorted()方法可以对列表、元组、字典、range对象等进行排序。列表的sort()方法和内置函数sorted()都支持key参数实现复杂排序要求。



#使用key来指定排序依据,先按姓名升序排序,姓名相同的按年龄降序排序
>>> persons = [{'name':'xuzm', 'age':10}, {'name':'xuzm2', 'age':20}, {'name':'xuzm4', 'age':40}, {'name':'xuzm3', 'age':30}]

>>> persons
[{'name': 'xuzm', 'age': 10}, {'name': 'xuzm2', 'age': 20}, {'name': 'xuzm4', 'age': 40}, {'name': 'xuzm3', 'age': 30}]
>>> print(sorted(persons, key=lambda x:(x['name'], -x['age'])))
[{'name': 'xuzm', 'age': 10}, {'name': 'xuzm2', 'age': 20}, {'name': 'xuzm3', 'age': 30}, {'name': 'xuzm4', 'age': 40}]

>>> phonebook = {'xuzm':'123', 'xuzm2':'456', 'xuzm3':'789'}
>>> from operator import itemgetter
>>> sorted(phonebook.items(), key=itemgetter(1))    #按字典元素的值默认进行升序排列
[('xuzm', '123'), ('xuzm2', '456'), ('xuzm3', '789')]
>>> sorted(phonebook.items(), key=itemgetter(0),reverse=True)     #按字典中元素的键进行降序排序
[('xuzm3', '789'), ('xuzm2', '456'), ('xuzm', '123')]

>>> gameresult = [['Bob', 95.0, 'A'], ['Alan', 86.0, 'C'], ['Mandy', 83.5, 'A'], ['Rob', 89.3, 'E']]
>>> sorted(gameresult, key=itemgetter(0, 1))    #按姓名升序排列,姓名相同的按分数进行升序排列
[['Alan', 86.0, 'C'], ['Bob', 95.0, 'A'], ['Mandy', 83.5, 'A'], ['Rob', 89.3, 'E']]
>>> sorted(gameresult, key=itemgetter(1, 0))    #按分数进行升序排列,分数相同的按姓名进行升序排列
[['Mandy', 83.5, 'A'], ['Alan', 86.0, 'C'], ['Rob', 89.3, 'E'], ['Bob', 95.0, 'A']]
>>> sorted(gameresult, key=itemgetter(2, 0))    #按等级升序排列,等级相同的按姓名进行升序排列
[['Bob', 95.0, 'A'], ['Mandy', 83.5, 'A'], ['Alan', 86.0, 'C'], ['Rob', 89.3, 'E']]
>>> gameresult = [{'name':'Bob', 'wins':10, 'losses':3, 'rating':75.0},
                              {'name':'David', 'wins':3, 'losses':5, 'rating':57.0},
                              {'name':'Carol', 'wins':4, 'losses':5, 'rating':57.0},
                              {'name':'Patty', 'wins':9, 'losses':3, 'rating':72.8}]
>>> sorted(gameresult, key=itemgetter('wins', 'name'))    #按wins排列,wins相同的按name惊进行排列
[{'name': 'David', 'wins': 3, 'losses': 5, 'rating': 57.0}, {'name': 'Carol', 'wins': 4, 'losses': 5, 'rating': 57.0}, {'name': 'Patty', 'wins': 9, 'losses': 3, 'rating': 72.8}, {'name': 'Bob', 'wins': 10, 'losses': 3, 'rating': 75.0}]


根据另一个列表的顺序排列一个列表
>>> list1 = ["what", "I'm", "sorting", "by"]
>>> list2 = ["something", "else", "to", "sort"]
>>> pairs = zip(list1, list2)    #用zip对象压缩
>>> pairs = sorted(pairs)    #新列表按照list1进行排序
>>> pairs
[("I'm", 'else'), ('by', 'sort'), ('sorting', 'to'), ('what', 'something')]
>>> result = [x[1] for x in pairs]    #按新列表中list1的顺序筛选出新列表中的list2部分
>>> result
['else', 'sort', 'to', 'something']

查看评论

Python+Selenium+PIL+Tesseract真正自动识别验证码进行一键登录

Python 2.7 IDE Pycharm 5.0.3Selenium:Selenium的介绍及使用,强烈推荐@ Eastmount的博客PIL : Pillow-3.3.0-cp27-cp27m...
  • MrLevo520
  • MrLevo520
  • 2016-07-13 21:15:20
  • 46547

如何让python idle自动补全代码

 在安装目录下有Lib\idlelib 目录 下面的idle.py ;idle.pyw 就是idle的主要程序(其实最后调用的是pyshell.py) 要打开自动完成功能 主要步骤是 ...
  • xjfirefox
  • xjfirefox
  • 2016-06-23 10:54:02
  • 7551

ORACLE中record、varray、table和%type、%rowtype的使用详解

1     说明 1.1       RECORD   定义记录数据类型。它类似于C语言中的结构数据类型(STRUCTURE),PL/SQL提供了将几个相关的、分离的、基本数据类型的变量组成一...
  • xiaokui_wingfly
  • xiaokui_wingfly
  • 2015-05-24 18:14:42
  • 4517

Python之%s%d%f

%s 字符串string="hello" #%s打印时结果是hello print "string=%s" % string # output: string=hello ...
  • qq_37482544
  • qq_37482544
  • 2017-03-19 21:59:20
  • 21942

Python到底能干什么

转自:https://www.itdongshi.com/show/114.html?ref=myread 摘要: ​Python是一种计算机程序设计语言,又被称为胶水语言,可以用混合编译的方式...
  • qq_37694763
  • qq_37694763
  • 2017-04-19 15:57:58
  • 8684

系统学习Java和无基础自学python的一些感受

系统的开始学习java后,我意识到了自己之前对python的学习是多么的浅薄,对编程的学习是多忙的浅薄,故有感而发水上一篇...
  • shuiqukeyou12
  • shuiqukeyou12
  • 2016-10-23 15:35:04
  • 7549

学Python后到底能干什么?

老农学的语言确实不少,现在排名流行的语言中居然Python我真的不知道干啥的,我学过一下,感觉更加高级一点,接近自然语言。和平台毫无关系,Python替换VF成了国家二级考试内容,我今天转载一下,不过...
  • wlanye
  • wlanye
  • 2017-12-13 10:23:55
  • 5614

关于Python安装模块出现error: command 'gcc' failed with exit status 1错误的解决方法

当使用pip install ###时,有时会出现如标题上的问题,我遇到的问题如下:_posixsubprocess.c:3:20: fatal error: Python.h: No such fi...
  • coder_Gray
  • coder_Gray
  • 2017-08-15 14:28:40
  • 4850

《Python基础教程》PDF电子书

  • 2016年07月01日 13:49
  • 1.23MB
  • 下载

为什么用Python开发桌面应用程序

为什么用Python开发桌面应用程序 为什么用Python开发桌面应用程序 1)wxWidgets是一个比MFC优雅的库,TortoiseCVS用wxWidges而不用MFC,就是...
  • duck_arrow
  • duck_arrow
  • 2015-03-26 15:58:44
  • 16827
    个人资料
    等级:
    访问量: 419
    积分: 259
    排名: 30万+
    文章存档