1. 程式人生 > >在python中排序元組

在python中排序元組

在python中,當你排序一個元組時,如下所示:

>>> items = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
>>> sorted(items)
[(0, 'B'), (0, 'a'), (1, 'A'), (1, 'B'), (2, 'A')]

        預設情況下,sort和sorted內建函式會優先排序第一個元素,然後再排序第二個元素,大寫字母會排在小寫字母前面。當你想要不區分大小寫排序時,可能會按如下寫程式碼:

>>> sorted(items, key=
str.lower) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: descriptor 'lower' requires a 'str' object but received a 'tuple'

出現了錯誤,lower需要的是字串物件,但是接收到了元組。下面的應用lamdba,返回一個元組:

>>> sorted(items, key=lambda x: (x[0], x[1].lower()))
[(0, 'a'), (0,
'B'), (1, 'A'), (1, 'B'), (2, 'A')]

我確定你知道可以通過 sorted(items, reverse=True, ...) 將其反轉,但是如果你想要依賴你提供的key來獲得不同的排序順序時,該怎麼辦呢?使用lambda函式返回一個元組可以實現,下面是一個更高階的結構排序

>>> 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逆序,只需要如下改動:

>>> sorted(peeps, key=lambda x: (x['name'], -x['salary']))
[{'salary': 1000, 'name': 'Bill'}, {'salary': 500, 'name': 'Bill'}, {'salary': 500, 'name': 'Ted'}]