Python根據多個條件進行排序

小白一名,最近在做ccfcsp的題目,做到201503-02數字排序,個人認爲這個題目就是屬於多條件排序,當然題目裏面說的也很清楚,先按照次數進行降序,次數相同的話,就按照升序進行排。

在csdn裏查找幾個關於Python多條件排序,說的好像都沒毛病,但是配的代碼自己運行,就會出現問題,得不出博主的結果,也不敢問,自己覺得寫的代碼好像錯了哈。所以自己在他們的基礎上,歸納下哈。

 

主條件升(降)序,同等情況下次條件降(升)。這裏介紹2種條件,2種以上也是一樣的。

1、純數值

先舉例

查到的說sorted函數屬於穩定排序,原型是

常用到的參數是iterable,key,reverse,具體是啥意思請自己查哈

這裏的key可以是一個參數,也可以是一個自定義的函數,上面那行代碼的意思就是對a這個列表,先按照元組的第二個元素進行降序排序,遇到同等情況,如這裏的(3,4)(2,4)就對元組中第一個元素進行升序排序。

其結果是

主次條件的順序等於key=lambda x:(-x[1],x[0])這裏面的括號中順序,也就是說如果你想要先按元組中第一個元素排升序,同等條件下,按第二個排降序,寫法就是sorted(a,key=lambda x:x[0],-x[1])),這裏加負號的原因是,該方法默認reverse=False,也就是升序,要是寫降序,就得加負號。前提是排序的都是數值哈。

也可以分開來寫,分開寫,先排次條件,再排主條件。

 

2、字符

借鑑一個他人的數據,這裏的排序要求是按照升序進行排序,條件優先:P>GD>GS>GA

teamitems = [{'team':'France'   , 'P':1 , 'GD':-3 , 'GS':1 , 'GA':4}, 
      {'team':'Uruguay'   , 'P':7 , 'GD':4 , 'GS':4 , 'GA':0}, 
      {'team':'SouthAfrica' , 'P':4 , 'GD':-2 , 'GS':3 , 'GA':5}, 
      {'team':'Mexico'   , 'P':4 , 'GD':1 , 'GS':3 , 'GA':2}] 
 
print(sorted(teamitems ,key = lambda x:(x['P'],x['GD'],x['GS'],x['GA']),reverse=True) )

如果是要某一部分條件升,一部分降的話,就只能分開寫,而且是有先後順序地。優先級高的條件要寫在最後。優先級低的反而寫在前面。

這裏key除了寫簡單的lambda,還可以寫函數。

https://www.cnblogs.com/yeyong/p/6074825.html這篇博主寫的list多級排序,

舉例的第二個我運行是錯誤,

思路沒問題,但是舉的第二個例子第一行代碼我運行出錯,這裏的items應該是
items = [x.split(',') for x in list(filter(None, data.split('\n')[2:]))]

fliter是過濾器,返回的迭代對象,另外博主註釋的是忽略首行,應該還有第一行,所以從2開始。

 

 

發佈了22 篇原創文章 · 獲贊 12 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章