在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python  網(wǎng)絡安全/ 一個關于lambda的小問題

一個關于lambda的小問題

persons= [{'name': 'Jon', 'age': 32}, {'name': 'Alan', 'age': 50}, {'name':'Bob', 'age':23}]

sorted(persons, key = lambda x: (x['name'], -x['age']))

persons

[{'age': 32, 'name': 'Jon'},
{'age': 50, 'name': 'Alan'},
{'age': 23, 'name': 'Bob'}]

輸出結果:

[{'age': 50, 'name': 'Alan'},
{'age': 23, 'name': 'Bob'},
{'age': 32, 'name': 'Jon'}]

這是一個關于sorted函數(shù)的講解,我知道這里key是接收一個函數(shù),但是里面的x和-x我無法理解是怎么做到排序的,還希望前輩可以指點一二,先行謝過。

回答
編輯回答
落殤
(x['name'], -x['age'])

元組及其它可迭代對象(比如元組的第一項字符串也是)默認比較順序是按照元素依次比較,順序類型為正序。
數(shù)字則是按大小比較。正序即從小到大,“-”號的就是相反數(shù),按相反數(shù)的正序,即逆序從大到小。
所以整體的意思就是先按名字從前往后(字符集順序),一樣則按年齡從大到小。

2017年3月7日 14:56
編輯回答
雨萌萌

排序是基于比較進行的。所以name的比較是正比較,也就是較小的名字=較小的對象=排在更前面,較大的名字=較大的對象=排在更后面,這比較下來就可以根據(jù)名字排好序了。

第二個-age意思是在名字相同的對象(例如好幾個人的名字都叫John)之間,采用年齡的負比較,也就是年齡大的反而被認為是?。ㄅ旁诟懊妫?,年齡小的反而被認為是大(排在更后面)。

2017年10月23日 15:25
編輯回答
忠妾

這個lambda的功能已經(jīng)被 @代碼詩人芋頭 解釋的很清楚了

我想補充的是關于這個sorted是如何排序的

如果排序關鍵字是一個元組,例如('a', 1)('b', 0)排序,排序規(guī)則是從元組的第一個元素開始往后比較,直到遇到一個不相等的,這個時候哪個元組相應的元素大,哪個元組就大。類似于字典序

所以這個sorted的意思是先按名字從小到大排序,如果名字一樣就按年齡從大到小排序

2017年5月4日 00:43