sorted函数

1、函数介绍

sorted(iterable, cmp=None, key=None, reverse=False)

参数说明:
    (1)iterable:
            是可迭代类型;
    (2)cmp
             接受一个自定义的比较函数,例如:
             def f(s1, s2):   # 比如s1,s2是dict类型,将每个人的年龄作为比较元素
                   return s1['age'] - s2['age']

              如果s1['age']逻辑小于s2['age'],函数返回负数;s1['age']逻辑等于s2['age'],函数返回0;

              s1['age']逻辑大于 s2['age'],返回正数

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

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

2、举例

2.1自定义cmp函数

def self_cmp(s1, s2):
    return s1[2] - s2[2]
# 分别对应:姓名,成绩等级,年龄
S = [('XiaoWang', '1', 15), ('XiaoMing', '2', 12), ('XiaoLi', '4', 10), ('XiaoHong', '2', 10)]
print sorted(S, cmp = self_cmp)  # 比较对象设置为年龄,和将年龄作为key效果一致

结果:

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

2.2自定义key

def self_key(s):
    return s[1]
S = [('XiaoWang', '1', 15), ('XiaoMing', '2', 12), ('XiaoLi', '4', 10), ('XiaoHong', '2', 10)]
print sorted(S, key = self_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)
print f(a)

结果:2

from operator import itemgetter
a = [1,2,3]
f = itemgetter(0,1)
print 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))

结果:

[('age4', 10), ('age3', 10), ('age2', 12), ('age1', 15)]


猜你喜欢

转载自blog.csdn.net/ye1215172385/article/details/80468364