介绍

sorted方法用来进行排序操作,如数字,字符串组成的list,根据dict类型的key或者value排序,现将平时使用的sorted的方法和数据类型进行整理。

sorted(iterable[, cmp[, key[, reverse]]])"""对一个iterable对象排序,返回一个排序之后的list@param iterable 可迭代遍历对象@param cmp 默认None, 自定义的比较函数,2个参数@param key 默认None, 自定义的函数,1个参数,参数值来源与列表元素@param reverse 默认False(正序)@return 返回一个排序之后的list"""pass

数据类型

首先自定义object用于后续的比较。定义User,包含name和age两个成员变量

class User(object):def __init__(self, name, age):self.name = nameself.age = agedef __repr__(self):return repr((self.name, self.age))

list

以list类型的对象作为待排序数据,其中元素为数字,字符串,元组,object分别给出测试样例。

  • 简单类型样例
# -*- coding=utf-8 -*-
from operator import itemgetter, attrgetterdef sort_list():"""关于list类型的排序操作"""# 数值类型test_list = [1, 2, 19, 30]print sorted(test_list)print sorted(test_list, reverse=True)# 字符串类型test_list = ["a", "boy", "named", "marvin"]print sorted(test_list)print sorted(test_list, reverse=True)# tuple类型test_list = [("Up", 0), ("Down", 1), ("Left", 2), ("Right", 3)]# tuple的index=0处值比较,即"Up","Down"等比较print sorted(test_list, key=lambda item: item[0])# tuple的index=1处值比较,即0,1等比较print sorted(test_list, key=lambda item: item[1])# tuple的index=1处值比较,itemgetter获取元素1号位置print sorted(test_list, key=itemgetter(1))
  • object类型示例
def sort_list_obj():"""object组成的list排序"""# 根据User的属性name的值排序# attrgetter获取元素的属性值test_list = [User("James", 30), User("Marvin", 28), User("Parke", 40), User("Li", 40)]print sorted(test_list, key=lambda user: user.name)print sorted(test_list, key=attrgetter("name"))# 根据User的属性age的值排序print sorted(test_list, key=lambda user: user.age)print sorted(test_list, key=attrgetter("age"))# 先根据age排序,再根据name排序print sorted(test_list, key=attrgetter("age", "name"))if __name__ == "__main__":print "list sort test.\n--------------------"sort_list()print "list of object test.\n--------------------"sort_list_obj()
  • 输出结果
list sort test.
--------------------
[1, 2, 19, 30]
[30, 19, 2, 1]
['a', 'boy', 'marvin', 'named']
['named', 'marvin', 'boy', 'a']
[('Down', 1), ('Left', 2), ('Right', 3), ('Up', 0)]
[('Up', 0), ('Down', 1), ('Left', 2), ('Right', 3)]
[('Up', 0), ('Down', 1), ('Left', 2), ('Right', 3)]list of object test.
--------------------
[('James', 30), ('Li', 40), ('Marvin', 28), ('Parke', 40)]
[('James', 30), ('Li', 40), ('Marvin', 28), ('Parke', 40)]
[('Marvin', 28), ('James', 30), ('Parke', 40), ('Li', 40)]
[('Marvin', 28), ('James', 30), ('Parke', 40), ('Li', 40)]
[('Marvin', 28), ('James', 30), ('Li', 40), ('Parke', 40)]

dict

以dict类型的对象作为待排序数据,其中元素为数字,字符串,元组,对象分别给出测试样例。

  • 简单对象示例
def sort_map():"""map类型的排序操作"""# 数值类型test_map = {1: "a", 2: "boy", 3: "named", 4: "marvin"}print sorted(test_map)print sorted(test_map.values())# 根据value排序print sorted(test_map.items(), key=lambda item: item[1])# 根据key排序print sorted(test_map.items(), key=lambda item: item[0], reverse=True)# tuple类型test_map = {1: ("Up", 0), 2: ("Down", 1), 3: ("Left", 2), 4: ("Right", 3)}print sorted(test_map.items(), key=lambda item: item[1][0])
  • object对象示例
def sort_dict_obj():"""object组成的dict的value排序"""test_map = {1: User("James", 30), 2: User("Marvin", 28), 3: User("Parke", 40), 4: User("Li", 79)}# 根据value的age排序print sorted(test_map.items(), key=lambda item: item[1].age)# 根据value的name排序print sorted(test_map.items(), key=lambda item: item[1].name)# 根据key排序print sorted(test_map.items(), key=lambda item: item[0])print sorted(test_map.items(), key=itemgetter(0))# 根据value的age对values排序print sorted(test_map.values(), key=lambda item: attrgetter("age"))if __name__ == "__main__":print "map sort test\n--------------------"sort_map()print "dict of object test. \n--------------------"sort_dict_obj()
  • 输出结果
map sort test
--------------------
[1, 2, 3, 4]
['a', 'boy', 'marvin', 'named']
[(1, 'a'), (2, 'boy'), (4, 'marvin'), (3, 'named')]
[(4, 'marvin'), (3, 'named'), (2, 'boy'), (1, 'a')]
[(2, ('Down', 1)), (3, ('Left', 2)), (4, ('Right', 3)), (1, ('Up', 0))]dict of object test.
--------------------
[(2, ('Marvin', 28)), (1, ('James', 30)), (3, ('Parke', 40)), (4, ('Li', 79))]
[(1, ('James', 30)), (4, ('Li', 79)), (2, ('Marvin', 28)), (3, ('Parke', 40))]
[(1, ('James', 30)), (2, ('Marvin', 28)), (3, ('Parke', 40)), (4, ('Li', 79))]
[(1, ('James', 30)), (2, ('Marvin', 28)), (3, ('Parke', 40)), (4, ('Li', 79))]
[('James', 30), ('Marvin', 28), ('Parke', 40), ('Li', 79)]

参考文献

python-2.7.14-docs -> Built-in Functions -> sorted()

python sorted方法相关推荐

  1. python中sorted_Python中sorted()方法的用法

    Python中sorted()方法的用法 2012-12-24 22:01:14| 分类: Python |字号 1.先说一下iterable,中文意思是迭代器. Python的帮助文档中对itera ...

  2. python排序方法sorted和list.sort()使用讲解

    python排序方法sorted和list.sort使用讲解 前言 一.排序函数的算法原理 二.sorted()和List.sort()使用方法讲解 1.sorted()函数使用方法 2.List.S ...

  3. python中sorted用法_Python中sorted()方法的用法

    1.先说一下iterable,中文意思是迭代器. Python的帮助文档中对iterable的解释是:iteralbe指的是能够一次返回它的一个成员的对象.iterable主要包括3类: 第一类是所有 ...

  4. Python sorted() 函数

    sorted 函数是 Python 中的内置函数,作用是对所有可迭代的对象进行排序. sort 与 sorted 区别: sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进 ...

  5. python sorted原理_Python sort()和sorted()

    Python sort()和sorted() sort 与 sorted 区别: sort() sort()是列表list的方法之一 L.sort(key=None, reverse=False) s ...

  6. 23-26 Python File方法、OS文件/目录方法、异常处理、内置函数

    23Python File方法 23.1open()方法 Python open()方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数.如果该文件无法被打开,会抛出OSEr ...

  7. Python dic 方法汇总

    python]dictionary方法说明 Operation Result Notes len(a) the number of items in a 得到字典中元素的个数 a[k] the ite ...

  8. DEMATEL-ISM模型的Python实现——方法介绍以及代码复现

    DEMATEL-ISM模型的Python实现--方法介绍以及代码复现 前言 DEMATEL-ISM分析方法 方法简介 步骤 明确系统要素 确定直接影响矩阵 规范影响矩阵 计算综合影响矩阵 计算各个要素 ...

  9. python sorted原理_深入理解Python的sorted

    1. 简介 sorted的派排序功能真强大,从前一直使用C++.Java以为其功能很强大了,但与Python一比,真的要差一些. 2. 函数定义 sorted(iterable, cmp=None, ...

  10. Python ljust()方法

    描述 Python ljust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串.如果指定的长度小于原字符串的长度则返回原字符串. 语法 ljust()方法语法: str.ljust ...

最新文章

  1. dbms_rowid包的BUG问题
  2. scala-04For与Function进阶实战、Lazy的使用
  3. 求伯君:向暴雪学习 金山不求一夜暴富
  4. linux8系统安装总结,硬盘安装Ubuntu 8.04经验总结(图)
  5. Android studio怎么配置javadoc生成项目API
  6. MAC启动redis的目录
  7. jq上传file到php,jQuery文件上传
  8. 软件“美不美”,UI测试一下就知道
  9. 【博客美化】09.评论带头像,且支持旋转
  10. python学习笔记(十二)python操作redis
  11. idea连接Mysql报错
  12. iframe 父页面 子页面互相取值调用
  13. 三个箭头循环标志_摩托车6年免检,应该如何通过APP申请免检检验标志?
  14. 达摩院最新突破:新型量子芯片操控精度99.72%创新高
  15. maven+scala和java_maven打包scala+java工程
  16. 基于vlmcsd搭建KMS服务器
  17. 需求分析之矩阵分析法
  18. 使用 RSA 算法进行加解密,签名和验签
  19. 从0到1的电商架构应该怎么做?有哪些坑?
  20. android 百度地图3.0定位,百度地图定位功能实现v3_0_0

热门文章

  1. Wintel机器代码反反转练习(C/C++逆向)
  2. 耦合电感元件的相关概念
  3. 华为路由器配置备忘录
  4. spring boot 集成paypal支付 rest api v2的实现
  5. [转载]GBK 汉字内码扩展规范编码表(1.0 版)
  6. 七周成为数据分析师 第五周:Mysql
  7. 2021年南京市高考成绩查询,2021年南京各高中高考成绩排名及放榜最新消息
  8. 使用R语言进行单(双)因素方差分析
  9. 如何才能提高团队工作效率
  10. Java二维码登录流程实现(包含短地址生成,含部分代码)