美文网首页
【Python】sorted 高级排序

【Python】sorted 高级排序

作者: Silver_42ac | 来源:发表于2019-10-07 21:25 被阅读0次

    迟到的短文

    0、前提讲解

    0.1 lambda 参数 : 表达式

    lambda x:x
    第一个x,在冒号前,表示判断等效于 if x : ,后面则为返回x ,也可以对x进行操作

    if  x :
        return x 
    

    0.2 sorted()函数常用内容

    sorted(排序对象,  key=排序根据的内容 ,cmp=排序的前后两个单独元素, reverse=False)
    
    其他人的笔记:key 和 reverse 比一个等价的 cmp 函数处理速度要快。这是因为对于每个列表元素,cmp 都会被调用多次,而 key 和 reverse 只被调用一次
    

    后面主要介绍 key 和 reverse 的组合进行排序
    给出一个cmp使用的例子

    L=[('b',2),('a',1),('c',3),('d',4)]
    sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))   # 利用cmp函数,这里的x,y 单次循环的第一次,就是 x,y=('b',2),('a',1)
    x[1]==2
    y[1]==1
    结果就是 ('b',2)与('a',1)调换顺序
    

    0.3 字典对象的 items() 方法/函数

    items()就是把字典里的每个keys values 组成个元组,依次传出来总体也是一个元组

    dict = {'Name': 'Runoob', 'Age': 7}
    for i,j in dict.items():  #dict.items() 返回的实际上是元组((key1,value1)(key2,value2)(key3,value3))中的一个元组元素(key1,value1)
        #左侧用i,j 两个元素接住key1,value1;以此类推
        print(i, ":\t", j)
    

    0.4 字典对象的 defaultdict()方法/函数

    from collections import defaultdict
    
    dict1 = defaultdict(int)
    dict1[2] ='two'
    dict2 = defaultdict(set)
    dict3 = defaultdict(str)
    dict4 = defaultdict(list)
    dict5 = defaultdict(dict)
    
    
    print(dict1[1])
    print(dict2[1])
    print(dict3[1])
    print(dict4[1])
    print(dict5[1])
    

    结果

    0        #这里被强制转换为int 整数0了
    set()    #set 集合类型
             #str 字符串类型,其实就是空字符串 “”
    []       #list 列表类型
    {}       #dict 字典类型
    

    1、普通字典内容排序

    • 建立dict_sort 的keys 如下
    abcd123_c1
    abcd12_c2
    abcd23_c1
    abcd21_c1
    

    dict_sort 内容建立如下

    {"abcd123_c1":1,"abcd12_c2":2,"abcd23_c1":3,"abcd21_c1":4}
    

    1.1 排序 key;

    sorted(dict.keys(),  key=lambda x:x ,reverse=False)
    

    1.2 排序value;

    sorted(dict.values(),  key=lambda x:x ,reverse=False)
    

    #只是单纯的排序key或者value,只是返回元组;

    1.3 split字符串后进行排序

    这里利用split,对多个分列元素进行排序

    for name in  sorted(dict.keys(),  key=lambda x:(x.split('_c')[0],int(x.split('_c')[1])) ,reverse=False):
        pass
    

    解析

    key=lambda x:(x.split('_c')[0],int(x.split('_c')[1])) 解析
    结构如下:key=lambda x:(a,b),曲两个值作为第一比对和第二比对条件#参考excel中的高级排序
    x.split('_c')[0],对x使用字符串“_c” 分割,取第一个元素
    
    这里是对“_c'”前后两个内容作为第一第二排序条件
    #pass 只是一个占位符,编程时函数或者循环里不知道写什么可以写pass,类似 continue,什么也不做
    

    多列排序

    可以根据多个条件进行排序,这里用x的第0,3,4索引的内容作为第一,第二,第三排序条件

    a=[[1,3,4] ,[2,4,2],[2,3,6]]
    #这里时一个多维列表
    a.sort(key=lambda x:(x[0],int(x[3]),int(x[4])))
    
    排序结果:
    a=[[1,3,4] ,[2,3,6],[2,4,2]]
    默认升序,添加 reverse=True 可以倒序排序
    

    根据特殊结构排序

    test = defaultdict(list)
    test={ "key1":[1,2,3,4], "key2:"[3,4,5,6] }
    items = sorted(test.items(), key=lambda x:x[1][3], reverse=True)
    
    #test.items()  返回时一个列表 ("key1",[1,2,3,4])
    x[1] 则是[1,2,3,4]
    x[1][3] 的话就是 4了
    

    2、复杂列表排序

    利用 key 和 reverse

    L=[('b',2),('a',1),('c',3),('d',4)]
    sorted(L, key=lambda x:x[1]))   
    

    利用cmp函数

    L=[('b',2),('a',1),('c',3),('d',4)]
    sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))   
    这里的x,y 单次循环的第一次,就是 x,y=('b',2),('a',1)
    x[1]==2
    y[1]==1
    结果就是 ('b',2)与('a',1)调换顺序
    

    参考网址:
    #参考网址并非完全的都看一遍;挑取对自己有用的信息看
    Python字典按key、value排序问题详解
    python中defaultdict用法详解
    #说明defaultdict的用法就是设定好字典value的变量
    Python sorted() 函数
    #了解基本用法,或者说常说的函数原型,其实就是函数用起来时的基本参数有哪些

    相关文章

      网友评论

          本文标题:【Python】sorted 高级排序

          本文链接:https://www.haomeiwen.com/subject/qbabjctx.html