python字典排序、列表排序、升序、降序、逆序如何区别使用?

简介: python字典排序、列表排序、升序、降序、逆序如何区别使用?

一、基础概念



我们知道python中的内建序列包括字典、列表、元组、字符串等,序列是python中最基本的数据结构。

列表、元组、字符串这类的序列的索引默认第一个元素的索引从0开始,第二个元素的索引是1,依次是2、3、4...

字典的索引则直接由键来决定值,键可以是字符串、元组、数字,依次对应到相应的值。例如:dic1={"老刘":"刘金玉",33:"123",(2,3,4):"老王"},如果想要获取“刘金玉”这个值,那么只需要写dic1["老刘"]即可。


二、排序:



排序使用的函数往往是sorted,这个函数使用后返回,这个函数我们只需要了解三个参数,我们就可以解决日常的排序问题。

1、列表的排序

举例:

列表是

list1=[4,22,5,7,3,2,723,88]

使用

sorted(list1)

排序后默认得到升序的结果[2, 3, 4, 5, 7, 22, 88, 723]

这类的sorted函数时候后,直接返回一个列表,可以再使用一个变量来存储这个排序后的返回结果。

如果想要降序,那么可以使用reverse参数为True即可,代码如下:

sorted(list1,reverse=True)


其实还有一个函数是用作逆序输出,就是reversed函数,这个函数会返回一个对象,如果要转为列表,必须使用list函数进行转换。

以下代码逆序返回一个对象:

reversed(list1)

对象的结果显示一个内存的位置,

转为列表后的代码如下:

list(reversed(list1))

逆序输出的结果为:[88, 723, 2, 3, 7, 5, 22, 4]


此外,还有一种复杂列表的排序,列表举例代码如下:

person=[("老刘","程序员",40),("老张","服务员",30),

("老李","警察",50)]

这个复杂列表的排序,需要结合lambda表达式来针对相应的值进行比较排序。

list6asc=sorted(person,key=lambda person:person[2])


排序结果为:[('老李', '警察', 50), ('老刘', '程序员', 40), ('老张', '服务员', 30)]

其实这里更重要的根本是采用sorted函数中的key参数传值进去。这里使用第三个位置的年龄进行比较排序。默认情况下以升序排序。如果想要降序,就添加reverse参数。

list6asc=sorted(person,key=lambda person:person[2],

reverse=True)


2、典的排序

假设字典是这样的:

dic1={"d2":40,"d1":30,"d3":50}

对字典的排序有两种主要的方式。

第一种:使用键的方式。

dic2asc=sorted(dic1,key=dic1.__getitem__)

dic2asc的结果为['d1', 'd2', 'd3'],从这里可以看出,我们的__getitem__魔法属性出入的都是字典的键。

那么,我们知道字典的键后,再想知道对应的值,就很好办了,我们就直接遍历一下吧。

for k in dic2asc:

   print(k+" "+str(dic1[k]))

   pass

输出结果为:

d1 30

d2 40

d3 50

当然,如果想要降序,同样还是使用reverse参数设置为True,这里注意,True的首字母一定要大写,很多同学喜欢小写。在Python中的变量名称是区分大小写的。

      第二种:使用items方法对字典整体排序输出

     这种方法还是要结合lambda表达式来一起使用,使用起来也很方便。

dic4asc=sorted(dic1.items(),key=lambda dic1:dic1[1])

     现在如果想要降序,我想应该不用多说了吧。但以上代码输出的结果是一个列表。[('d3', 50), ('d2', 40), ('d1', 30)]

如果想要把这个列表转为字典,可以通过

dict(dic4asc)

进行转换,非常方便!转换后的结果如下:

{'d3': 50, 'd2': 40, 'd1': 30}


三、本教程源码



list1=[7,2,5,88,33,55,66]
#升序排序,从小到大
list2asc=sorted(list1)
print("升序结果:")
print(list2asc)
#降序排序,从大到小
print("降序结果:")
list3desc=sorted(list1,reverse=True)
print(list3desc)
#逆序输出
print("逆序输出")
list4rev=reversed(list1)
print(list(list4rev))
#复杂列表
print("复杂列表排序输出")
list5=[["老刘",40],["老王",30],["老张",50]]
#升降序需要使用key,这个key是sorted函数中的参数
list6asc=sorted(list5,key=lambda list5:list5[1])
print(list6asc)
list7desc=sorted(list5,key=lambda list5:list5[1],reverse=True)
print(list7desc)
#字典的排序
dic1={"d2":40,"d1":30,"d3":50}
dic2asc=sorted(dic1,key=dic1.__getitem__)
print(dic2asc)
for k in dic2asc:
    print(k+" "+str(dic1[k]))
    pass
#字典的降序输出
dic3desc=sorted(dic1,key=dic1.__getitem__,reverse=True)
print(dic3desc)
for k in dic3desc:
    print(k+" "+str(dic1[k]))
    pass
#使用items方法来对字典排序
dic4asc=sorted(dic1.items(),key=lambda dic1:dic1[1])
print(dic4asc)
#使用降序
dic4asc=sorted(dic1.items(),key=lambda dic1:dic1[1],reverse=True)
print(dic4asc)
#转为字典
print(dict(dic4asc))

输出结果:

升序结果:
[2, 5, 7, 33, 55, 66, 88]
降序结果:
[88, 66, 55, 33, 7, 5, 2]
逆序输出
[66, 55, 33, 88, 5, 2, 7]
复杂列表排序输出
[['老王', 30], ['老刘', 40], ['老张', 50]]
[['老张', 50], ['老刘', 40], ['老王', 30]]
['d1', 'd2', 'd3']
d1 30
d2 40
d3 50
['d3', 'd2', 'd1']
d3 50
d2 40
d1 30
[('d1', 30), ('d2', 40), ('d3', 50)]
[('d3', 50), ('d2', 40), ('d1', 30)]
{'d3': 50, 'd2': 40, 'd1': 30}
进程已结束,退出代码0
相关文章
|
2月前
|
存储 开发者 Python
Python 中的数据结构与其他编程语言数据结构的区别
不同编程语言都有其设计理念和应用场景,开发者需要根据具体需求和语言特点来选择合适的数据结构
|
1天前
|
JSON 监控 安全
深入理解 Python 的 eval() 函数与空全局字典 {}
`eval()` 函数在 Python 中能将字符串解析为代码并执行,但伴随安全风险,尤其在处理不受信任的输入时。传递空全局字典 {} 可限制其访问内置对象,但仍存隐患。建议通过限制函数和变量、使用沙箱环境、避免复杂表达式、验证输入等提高安全性。更推荐使用 `ast.literal_eval()`、自定义解析器或 JSON 解析等替代方案,以确保代码安全性和可靠性。
11 2
|
2月前
|
XML JSON API
如何使用Python将字典转换为XML
本文介绍了如何使用Python中的`xml.etree.ElementTree`库将字典数据结构转换为XML格式。通过定义递归函数处理字典到XML元素的转换,生成符合标准的XML文档,适用于与旧系统交互或需支持复杂文档结构的场景。示例代码展示了将一个简单字典转换为XML的具体实现过程。
20 1
|
2月前
|
搜索推荐 Python
快速排序的 Python 实践:从原理到优化,打造你的排序利器!
本文介绍了 Python 中的快速排序算法,从基本原理、实现代码到优化方法进行了详细探讨。快速排序采用分治策略,通过选择基准元素将数组分为两部分,递归排序。文章还对比了快速排序与冒泡排序的性能,展示了优化前后快速排序的差异。通过这些分析,帮助读者理解快速排序的优势及优化的重要性,从而在实际应用中选择合适的排序算法和优化策略,提升程序性能。
50 1
|
3月前
|
存储 Java Serverless
【Python】字典
【Python】字典
40 1
|
3月前
|
机器学习/深度学习 缓存 Linux
python环境学习:pip介绍,pip 和 conda的区别和联系。哪个更好使用?pip创建虚拟环境并解释venv模块,pip的常用命令,conda的常用命令。
本文介绍了Python的包管理工具pip和环境管理器conda的区别与联系。pip主要用于安装和管理Python包,而conda不仅管理Python包,还能管理其他语言的包,并提供强大的环境管理功能。文章还讨论了pip创建虚拟环境的方法,以及pip和conda的常用命令。作者推荐使用conda安装科学计算和数据分析包,而pip则用于安装无法通过conda获取的包。
166 0
|
3月前
|
存储 安全 Serverless
Python学习四:流程控制语句(if-else、while、for),高级数据类型(字符串、列表、元组、字典)的操作
这篇文章主要介绍了Python中的流程控制语句(包括if-else、while、for循环)和高级数据类型(字符串、列表、元组、字典)的操作。
49 0
|
3月前
|
存储 自然语言处理 数据库
Python字典操作实现文章敏感词检索
Python字典操作实现文章敏感词检索
37 0
|
3月前
|
存储 JSON 数据处理
分析、总结Python使用列表、元组、字典的场景
分析、总结Python使用列表、元组、字典的场景
37 0
|
3月前
|
存储 算法 搜索推荐
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
84 0