【Python】sorted 高級排序

遲到的短文

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() 函數
#了解基本用法,或者說常說的函數原型,其實就是函數用起來時的基本參數有哪些

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容