sorted函数学习记录

1、函数介绍
sorted(iterable, cmp=None, key=None, reverse=False)
sorted(iterable, key=None, reverse=False)
iterable:适合迭代的对象,实际上,任何具有__iter__()或__getitem__()方法的对象,Python就认为它是一个iterable。
Python里有大量内置的iterable类型,
如: list,str,tuple,dict,file,xrange等。
python3取消了sorted方法中的cmp参数
False,表示升序;True表示降序

a = [1,3,10,20,8]
sorted(a)

[1, 3, 8, 10, 20]

参数说明:
(1)iterable:
是可迭代类型;

(2)key
接受一个自定义函数,但参数只有一个,例如:
def f(s): #比如s是一个dict
return s[‘grade’]
sorted以将成绩等级作为关键字,对学生进行排序

(2)reverse
False,表示升序;True表示降序

# 2.1自定义key
def self_key(s):
    return s[1]
# 分别对应:姓名,成绩等级,年龄
S = [('XiaoWang', '1', 15), ('XiaoMing', '2', 12), ('XiaoLi', '4', 10), ('XiaoHong', '2', 10)]
sorted(S, key = self_key)  # 根据成绩等级排序
#key:排序方案,sorted函数(内部)会把(可)迭代对象中的每一个元素拿出来交给后面key
#后面的key计算出一个数字,作为这个当前元素的权重,整个函数会根据权重进行排序


[('XiaoWang', '1', 15),
 ('XiaoMing', '2', 12),
 ('XiaoHong', '2', 10),
 ('XiaoLi', '4', 10)]
# 2.3 operator.itemgetter 函数
# operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号。

from operator import itemgetter
a = [1,2,3]
f = itemgetter(1)
#operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。
f(a)


2
from operator import itemgetter
a = [1,2,3]
f = itemgetter(0,1)
f(a)

(1, 2)
# 2.4 用 itemgetter 函数作为 sorted 中的 key
from operator import itemgetter
S = [('XiaoWang', '1', 15), ('XiaoMing', '2', 12), ('XiaoLi', '4', 10),
     ('XiaoHong', '2', 10)]
print sorted(S, key = itemgetter(1))    # 将第1维(成绩等级)作为关键字
结果和 key = self_key一致:

[('XiaoWang', '1', 15), ('XiaoMing', '2', 12), ('XiaoHong', '2', 10),
 ('XiaoLi', '4', 10)]

用 itemgetter 函数进行多级排序:

from operator import itemgetter
S = [('XiaoWang', '1', 15), ('XiaoMing', '2', 12), ('XiaoLi', '4', 10),
     ('XiaoHong', '2', 10)]
print sorted(S, key = itemgetter(1, 2))   # 先按照成绩等级,再按照年龄
结果:

[('XiaoWang', '1', 15), ('XiaoHong', '2', 10), ('XiaoMing', '2', 12), ('XiaoLi', '4', 10)]

2.5 对字典排序 ,先返回由 tuple 组成的 list
from operator import itemgetter
d = {'age1':15, 'age2':12, 'age3':10, 'age4':10}
# print sorted(d.iteritems(), key=itemgetter(1))
print sorted(d.items(), key=itemgetter(1))
结果:

[('age4', 10), ('age3', 10), ('age2', 12), ('age1', 15)]
from operator import itemgetter
d = {'age1':15, 'age2':12, 'age3':10, 'age4':10}
# print sorted(d.iteritems(), key=itemgetter(1))
print(d.items())#items函数将字典转化为列表,列表当中每一个元素都是一个元组


dict_items([('age1', 15), ('age2', 12), ('age3', 10), ('age4', 10)])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侬本多情。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值