sorted与.sort函数及sorted对字典或列表进行排序

一、sorted与.sort函数

sorted 语法:

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

参数说明:
iterable – 可迭代对象。
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
实例

example_list = [5, 0, 6, 1, 2, 7, 3, 4]
print(sorted(example_list, reverse=True))
#
#[7, 6, 5, 4, 3, 2, 1, 0]

.sort语法

list.sort(cmp=None, key=None, reverse=False)

参数说明
cmp – 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。
实例

def takeFirst(elem):#返回elem的第一个元素
    return elem[0]
list= [(1, 2), (3, 4), (5, 6), (7, 8)]

list.sort(key=takeFirst,reverse=True)
#以当前列表list的第一个元素为关键字排序且定义从大到小
print(list)

#结果
#[(7, 8), (5, 6), (3, 4), (1, 2)]

.sort 与 sorted 区别:
list.sort() 方法只是为列表定义的,而 sorted() 函数可以接受任何可迭代对象。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作(即需要容器来接受)。如果你不需要原列表,.sort会更有效率。

二、sorted对字典的key或value进行排序

要对字典的value排序则需要用到key参数,在这里主要提供一种使用lambda表达式的方法,如下:

dict = {"a":30,"b":25,"c":20}#字典
print(sorted(dict.items(),key=lambda x:x[1]))

#结果
[('c', 20), ('b', 25), ('a', 30)]

又或:

#以字典为元素的列表
list= [{"age":20,"name":"a"},{"age":25,"name":"b"},{"age":10,"name":"c"}]
print(sorted(list,key=lambda x:x["age"]))

#结果
#[{'age': 10, 'name': 'c'}, {'age': 20, 'name': 'a'}, {'age': 25, 'name': 'b'}]

这里的list.items()实际上是将list转换为可迭代对象,迭代对象的元素为 (a,20),(b,25),(c,30),items()方法将字典的元素 转化为了元组,而这里key参数对应的lambda表达式的意思则是选取元组中的第二个元素作为比较参数(如果写作key=lambda item:item[0]的话则是选取第一个元素作为比较对象,也就是key值作为比较对象。lambda x:y中x表示输出参数,y表示lambda 函数的返回值),所以采用这种方法可以对字典的value进行排序。注意排序后的返回值是一个list,而原字典中的名值对被转换为了list中的元组。而第二种方法是采用直接对list采用关键字key限定为列表元素的——字典的键值为参照来进行排序,输出结果仍是列表。

上一篇:stream().sorted汉字排序


下一篇:谈谈Python中那些高阶函数