一、基础概念
我们知道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