ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-03-27 14:00:35  阅读:163  来源: 互联网

标签:sort reverse list key 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限定为列表元素的——字典的键值为参照来进行排序,输出结果仍是列表。

标签:sort,reverse,list,key,sorted,排序,字典
来源: https://blog.csdn.net/weixin_49642831/article/details/115263154

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有