在Python中,當(dāng)你排序一個(gè)元組時(shí),如下所示:
>>> items = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]>>> sorted(items)[(0, 'B'), (0, 'a'), (1, 'A'), (1, 'B'), (2, 'A')]默認(rèn)情況下,sort和sorted內(nèi)建函數(shù)會(huì)優(yōu)先排序第一個(gè)元素,然后再排序第二個(gè)元素,大寫(xiě)字母會(huì)排在小寫(xiě)字母前面。當(dāng)你想要不區(qū)分大小寫(xiě)排序時(shí),可能會(huì)按如下寫(xiě)代碼:
>>> sorted(items, key=str.lower)Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: descr 出現(xiàn)了錯(cuò)誤,lower需要的是字符串對(duì)象,但是接收到了元組。下面的應(yīng)用lamdba,返回一個(gè)元組:>>> sorted(items, key=lambda x: (x[0], x[1].lower()))[(0, 'a'), (0, 'B'), (1, 'A'), (1, 'B'), (2, 'A')]我確定你知道可以通過(guò)
sorted(items, reverse=True, ...)
將其反轉(zhuǎn),但是如果你想要依賴(lài)你提供的key來(lái)獲得不同的排序順序時(shí),該怎么辦呢?使用lambda函數(shù)返回一個(gè)元組可以實(shí)現(xiàn),下面是一個(gè)更高級(jí)的結(jié)構(gòu)排序>>> peeps = [{'name': 'Bill', 'salary': 1000}, {'name': 'Bill', 'salary': 500}, {'name': 'Ted', 'salary': 500}]>>> sorted(peeps, key=lambda x: (x['name'], x['salary']))[{'salary': 500, 'name': 'Bill'}, {'salary': 1000, 'name': 'Bill'}, {'salary': 500, 'name': 'Ted'}]如果你想要使salary逆序,只需要如下改動(dòng):
>>> sorted(peeps, key=lambda x: (x['name'], -x['salary']))[{'salary': 1000, 'name': 'Bill'}, {'salary': 500, 'name': 'Bill'}, {'salary': 500, 'name': 'Ted'}]
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注