小白一名,最近在做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、字元
teamitems = [,如果是要某一部分條件公升,一部分降的話,就只能分開寫,而且是有先後順序地。優先順序高的條件要寫在最後。優先順序低的反而寫在前面。, ,
] print(sorted(teamitems ,key = lambda x:(x['p'],x['gd'],x['gs'],x['ga']),reverse=true) )
這裡key除了寫簡單的lambda,還可以寫函式。
這篇博主寫的list多級排序,
舉例的第二個我執行是錯誤,
思路沒問題,但是舉的第二個例子第一行**我執行出錯,這裡的items應該是
items = [x.split(',') for x in list(filter(none, data.split('\n')[2:]))]fliter是過濾器,返回的迭代物件,另外博主注釋的是忽略首行,應該還有第一行,所以從2開始。
PANDAS idioms 根據多個條件選擇
import functools import pandas as pd import numpy as np df pd.read excel examples.xls review what learned yesterday df level np.where df.年級 2013,old n...
python根據字典中的value進行排序
現在有乙個字典,key是字串,value是數字,希望根據value對字典進行排序,返回結果是列表,列表內的元素是原字典鍵值對組成的元組 例如 dic 經過排序後返回 return ace 12 abc 23 解決方法 lis sorted dic.items key lambda x x 1 若需要...
java list根據元素字段進行優先順序排序
在做乙個油田系統時遇到的需要根據優先順序排序的問題 現有乙個預算單的集合list,要根據歷史單據做新的預算單據,但在做之前要查到之前的單據進行修改另存為新的單據,查詢的過程是根據預算單的幾個引數進行優先順序排序查詢,以便查詢到最符合現在要求的歷史單據作為修改模板。預算單據實體 如下 column n...