一、sortedkey概述
sortedkey是Python中的一個排序函數,它主要用於從一個可迭代對象中提取關鍵字,並根據這些關鍵字進行排序。
在使用sortedkey函數時,需要指定一個key函數,這個函數用於從一個元素中提取排序所需的關鍵字,並作為排序的依據。
在Python中,sortedkey的使用非常廣泛。由於Python的面向對象特性,通過在key函數中調用類的某個屬性或方法,可以輕鬆地完成各種細緻、複雜的排序需求。
二、sortedkey使用方法
sortedkey函數的基本使用方法如下:
sorted(iterable, key=key, reverse=reverse)
其中,iterable表示要排序的可迭代對象;key是一個函數,用來提取排序的關鍵字;reverse是一個布爾值,表示是否要倒序排序,默認為False。
下面是一個簡單的例子:
numbers = [3, 5, 1, 2, 4] sorted_numbers = sorted(numbers) print(sorted_numbers) # [1, 2, 3, 4, 5] words = ['apple', 'banana', 'cherry', 'date'] sorted_words = sorted(words, key=len) print(sorted_words) # ['date', 'apple', 'banana', 'cherry']
在第二個例子中,我們通過指定key函數為len,實現了按照單詞長度排序的功能。
三、sortedkey高級應用
3.1、按多個關鍵字排序
在實際開發中,我們常常需要根據多個關鍵字進行排序,可以通過傳遞一個元組作為key函數,實現按多個關鍵字排序。
下面是一個按照姓名、年齡、成績進行排序的例子:
students = [ {'name': 'Tom', 'age': 20, 'score': 90}, {'name': 'Bob', 'age': 18, 'score': 98}, {'name': 'Alice', 'age': 22, 'score': 85}, {'name': 'Tim', 'age': 20, 'score': 95}, {'name': 'John', 'age': 19, 'score': 85}, ] sorted_students = sorted(students, key=lambda x: (x['name'], x['age'], -x['score'])) print(sorted_students) # [{'name': 'Alice', 'age': 22, 'score': 85}, # {'name': 'Bob', 'age': 18, 'score': 98}, # {'name': 'John', 'age': 19, 'score': 85}, # {'name': 'Tim', 'age': 20, 'score': 95}, # {'name': 'Tom', 'age': 20, 'score': 90}]
在這個例子中,我們首先按照姓名進行排序,如果姓名相同則按照年齡進行排序,如果年齡和姓名都相同則按照成績逆序排序。
3.2、按字典順序排序
在Python中,字典是一種非常常見的數據結構,我們有時會需要按照字典的順序對字典進行排序。這時,可以通過調用字典的items方法,將字典轉化為包含元組的列表,再傳遞給sorted函數進行排序。
下面是一個對字典按照鍵名字典序排序的例子:
d = {'banana': 3, 'apple': 2, 'cherry': 1} sorted_d = sorted(d.items()) print(sorted_d) # [('apple', 2), ('banana', 3), ('cherry', 1)]
3.3、按對象屬性排序
在Python中,我們可以定義類來表示某種實體,而按照對象的某個屬性進行排序是一個常見的需求。這時,可以通過在key函數中調用對象的屬性或方法,實現按照對象屬性排序的功能。
下面是一個按照人的年齡進行排序的例子:
class Person: def __init__(self, name, age): self.name = name self.age = age def __repr__(self): return f"{self.name}({self.age})" persons = [Person('Tom', 20), Person('Bob', 18), Person('Alice', 22)] sorted_persons = sorted(persons, key=lambda x: x.age) print(sorted_persons) # [Bob(18), Tom(20), Alice(22)]
3.4、按照自然排序排序
在默認情況下,sortedkey函數按照ASCII碼的序列進行排序,比如’a’會排在’A’的前面。有時我們需要按照自然排序進行排序,比如1會排在10的前面,這時可以使用Python標準庫中的natsort模塊。
下面是一個按照自然排序進行排序的例子:
import natsort items = ['a1', 'a10', 'a3', 'a2'] sorted_items = natsort.natsorted(items) print(sorted_items) # ['a1', 'a2', 'a3', 'a10']
3.5、使用sorted函數對對象列表排序
有時,我們需要對一個包含不同類型對象的列表進行排序,比如學生列表中包含了學生對象和其他非學生對象(如字符串、數字等),這時可以通過在key函數中使用isinstance函數,判斷對象類型並進行不同的排序處理。
下面是一個對學生列表進行排序的例子,其中學生對象的關鍵字為姓氏、名字、年齡,非學生對象的關鍵字為值:
class Student: def __init__(self, first_name, last_name, age): self.first_name = first_name self.last_name = last_name self.age = age def __repr__(self): return f"{self.last_name} {self.first_name} ({self.age})" items = [ Student('Tom', 'Brown', 20), 3, 'apple', Student('Bob', 'Green', 18), 5, 'cherry', Student('Alice', 'Black', 22) ] sorted_items = sorted(items, key=lambda x: ( isinstance(x, Student), x.last_name, x.first_name, x.age if isinstance(x, Student) else x )) print(sorted_items) # [3, # 5, # 'apple', # 'cherry', # Black Alice (22), # Green Bob (18), # Brown Tom (20)]
四、總結
本文詳細介紹了Python中的排序函數sortedkey的使用方法和高級應用場景,並給出了相應的代碼示例。在實際開發中,sortedkey是一個非常常用和強大的函數,能夠輕鬆地完成各種排序需求。
原創文章,作者:JEICM,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/369075.html