python基礎 -- 列表sort妙用

相信大家在使用列表時都使用過sort或sorted函數,再溫習一下

sort語法:

list.sort( key=None, reverse=False)

需要注意的是: 是在原列表上直接排序,返回爲None

還有一個key的使用如下:

如下:

ff = [{'age': 20, 'name': 'abc'}, {'age': 25, 'name': 'ghi'}, {'age': 30, 'name': 'def'}] 
ff.sort(fkey=lambda x:x['age'], reverse=True)

結果如下:

[{'age': 30, 'name': 'def'}, {'age': 25, 'name': 'ghi'}, {'age': 20, 'name': 'abc'}]

 

那麼,問題來了

需求是這樣:按age逆序排序,如果age相同的情況下,再按name的字母ASCII排序。

怎麼做呢,我們需要考慮兩點,這裏有兩重排序,去看看sort支不支持,

官方文檔及How Tos也沒介紹怎麼做

我們試試看

重新定義數據:

ff = [{'age': 20, 'name': 'abc'}, {'age': 25, 'name': 'ghi'}, {'age': 30, 'name': 'def'}, {'age':20, 'name':'bcd'}]

ff.sort(key=lambda x:(x['age'], x['name']), reverse=True)

結果如下:

[{'age': 30, 'name': 'def'}, {'age': 25, 'name': 'ghi'}, {'age': 20, 'name': 'bcd'}, {'age': 20, 'name': 'abc'}]

可以!!!!

但是:我們需求是age逆序排序,age相同情況下,按名字排序。在查看相關文檔後,發現reverse不能放在key內部....

解決方案:這時我們可以換個思路考慮,age是正數,我們爲何不在排序時把age搞成負數,reverse爲正序,不就可以正好解決問題。

如下:

ff.sort(key=lambda x:(-x['age'], x['name']))

結果:

[{'age': 30, 'name': 'def'}, {'age': 25, 'name': 'ghi'}, {'age': 20, 'name': 'abc'}, {'age': 20, 'name': 'bcd'}]

很好。解決問題。一個小小的負號。不需要自己再去重寫sort。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章