理解sort()函數(shù)中的key

最近在看effective-python,第二章函數(shù)中提到了優(yōu)先排序的概念漱逸,具體代碼如下:

values = [1, 5, 3, 9, 7, 4, 2, 8, 6]
group = [7, 9]


def sort_priority(values, group):
    def helper(x):
        if x in group:
            return (0, x)

        return (1, x)

    values.sort(key=helper)


sort_priority(values, group)
print(values)

[7, 9, 1, 2, 3, 4, 5, 6, 8]

這代碼的目的是group優(yōu)先于values排序(前提就是values包含group)罐旗,使用了閉包和sort()函數(shù)士八,很熟悉芒珠,正好復(fù)習(xí)一下牺堰。

sort(key=None, reverse=False)

sort()有兩個(gè)參數(shù)拄轻,一個(gè)是reverse,這個(gè)非常簡單伟葫,就是字面意思恨搓,如果設(shè)為True則反向排序(godv:?筏养?斧抱?)。另一個(gè)就是今天重點(diǎn)要說的渐溶,key辉浦,通常在字典的排序中可以見到這個(gè)參數(shù)(一般字典排序用sorted()):

dict = {'b': 1, 'r': 7, 'z': 2}
content = list(dict.items())  # 先轉(zhuǎn)換為列表包含元祖的形式

打印如下:

[('b', 1), ('z', 2), ('r', 7)]
content.sort(key=lambda x:x[0])  # 這里的0就是元祖的第一個(gè)元素,也就是按鍵排序掌猛。按值就是把0改成1

打印如下:

[('b', 1), ('c', 7), ('z', 2)]

原理:在排序之前盏浙,content里的所有元素都會(huì)執(zhí)行key的函數(shù),這里指的就是lambda函數(shù)荔茬,計(jì)算出值之后废膘,賦值給key(相當(dāng)于{'b': ('b', 1)}),然后sort()是針對key進(jìn)行排序慕蔚,然后再根據(jù)這個(gè)key對應(yīng)的值替換到排好序的content里丐黄。

看到這里,優(yōu)先排序的代碼就非常清晰了:
helper()函數(shù)判斷value中哪些元素在group中孔飒,并把其設(shè)置為以0為第一個(gè)元素的元祖灌闺,而不在group的元素則設(shè)置為以1為第一個(gè)元素的元祖,所以在sort()函數(shù)排序時(shí)坏瞄,位置靠前的當(dāng)然時(shí)以0開頭的元祖(鍵相同則按值排序)桂对,于是便完成了優(yōu)先排序。
以上鸠匀!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蕉斜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宅此,老刑警劉巖机错,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異父腕,居然都是意外死亡弱匪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門璧亮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萧诫,“玉大人,你說我怎么就攤上這事杜顺〔聘椋” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵躬络,是天一觀的道長尖奔。 經(jīng)常有香客問我,道長穷当,這世上最難降的妖魔是什么提茁? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮馁菜,結(jié)果婚禮上茴扁,老公的妹妹穿的比我還像新娘。我一直安慰自己汪疮,他們只是感情好峭火,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著智嚷,像睡著了一般卖丸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盏道,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天稍浆,我揣著相機(jī)與錄音,去河邊找鬼猜嘱。 笑死衅枫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的朗伶。 我是一名探鬼主播弦撩,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼论皆!你這毒婦竟也來了益楼?” 一聲冷哼從身側(cè)響起歧斟,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎偏形,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體觉鼻,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡俊扭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坠陈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萨惑。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖仇矾,靈堂內(nèi)的尸體忽然破棺而出庸蔼,到底是詐尸還是另有隱情,我是刑警寧澤贮匕,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布姐仅,位于F島的核電站,受9級特大地震影響刻盐,放射性物質(zhì)發(fā)生泄漏掏膏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一敦锌、第九天 我趴在偏房一處隱蔽的房頂上張望馒疹。 院中可真熱鬧,春花似錦乙墙、人聲如沸颖变。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腥刹。三九已至,卻和暖如春哗魂,著一層夾襖步出監(jiān)牢的瞬間肛走,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工录别, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留朽色,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓组题,卻偏偏與公主長得像葫男,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子崔列,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法梢褐,類相關(guān)的語法旺遮,內(nèi)部類的語法,繼承相關(guān)的語法盈咳,異常的語法耿眉,線程的語...
    子非魚_t_閱讀 31,597評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)鱼响,斷路器鸣剪,智...
    卡卡羅2017閱讀 134,626評論 18 139
  • 文/玥禾草原上一切都那么特別,特別是春天快要到了丈积,祝福所有小伙伴們春節(jié)快樂筐骇,讓我們放歌吧! 在北方江滨,寒冬并不遙遠(yuǎn) ...
    玥禾閱讀 453評論 3 50
  • 委屈這個(gè)詞铛纬,或許誰見了都不陌生。 是啊!從小到大誰沒有受過委屈唬滑?誰又沒有委屈過別人告唆? 童年的時(shí)候,或許委屈很小间雀,但...
    其樂絨絨閱讀 370評論 0 0
  • 1、眾安在線登陸港股 歐亞平現(xiàn)身上市儀式親自敲鐘连锯; 2归苍、國防部:殲20已列裝部隊(duì) 將向非盟提供無償援助; 3、從朝...
    筱小麗閱讀 248評論 0 0