Python排序函数sorted()

sorted()与sort()的区别:

1.sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
2.list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

格式:sorted(iterable, cmp=None, key=None, reverse=False)

iterable:可迭代对象。

cmp:比较的函数(一般省略)。

key:主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。常用的用来作为参数key的函数有 lambda函数和operator.itemgetter()。尤其是列表元素为多维数据时,需要key来选取按哪一位数据来进行排序。

reverse:排序规则,reverse = True 降序 , reverse = False 升序(默认)。

返回值:返回重新排序的列表,形式与输入一致。

举例:

(1)lambda函数作为参数key:

list = ['a', 'bc', 'defg', 'handsome', 'qwerrtyyuu']
print(sorted(list,key=lambda x:len(x),reverse=True))

# Output:
# ['qwerrtyyuu', 'handsome', 'defg', 'bc', 'a']

(2)operator.itemgetter()作为参数key:

import operator
tuple_list = [('A', 1,5), ('B', 3,2), ('C', 2,6)]
print(sorted(tuple_list, key=operator.itemgetter(1) ))#即按照第1维进行排序

# Output:
# [('A', 1, 5), ('C', 2, 6), ('B', 3, 2)]

(3)Python中对键值对进行输出和排序

d= {'a':24,'g':52,'i':12,'k':33}
# 以列表形式输出字典d的key
# d.items()为字典d的键值对
b1=[key for key,value in d.items()]
print(b1)
# 以列表的形式输出字典d的value
b2={value for key,value in d.items()}
print(b2)
# 颠倒字典d的key:value位置
b3={value : key for key,value in d.items()}
print(b3)
 
# 将字典d按value的值进行排序
b4=sorted(d.items(), key=lambda x: x[1])
print(b4)

输出结果:

['a', 'g', 'i', 'k']
{24, 33, 52, 12}
{24: 'a', 52: 'g', 12: 'i', 33: 'k'}
[('i', 12), ('a', 24), ('k', 33), ('g', 52)]

解析:代码sorted(d.items(), key=lambda x: x[1]) 中:

d.items() 为待排序的对象(键值对);

key=lambda x: x[1] 为对前面的对象中的第二维数据(即value)的值进行排序。

key=lambda  变量:变量[维数] 。维数可以按照自己的需要进行设置。这里lambda是匿名函数,指一类无需定义标识符(函数名)的函数或子程序。lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。

此外,对列表生成式b1=[key for key,value in d.items()]的理解:

(key,value)可以看成前面的d.items,for前面的key为获取前面的名字;

(4)lambda维数与字符串表示:

# 将列表中的age由大到小排序
alist = [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}]
b=sorted(alist,key=lambda x:x['age'],reverse=True)
print(b)

输出结果:

[{'name': 'b', 'age': 30}, {'name': 'c', 'age': 25}, {'name': 'a', 'age': 20}]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值