python3多重排序處理多數(shù)據(jù)的示例詳解
前言
主要講解多種方式的處理,以實際的Demo為主
| 方法 | 優(yōu)點 | 缺點 |
|---|---|---|
| 內(nèi)置 sorted() 函數(shù)與 lambda 表達式 | 簡單易用,代碼簡潔 適合處理較小的數(shù)據(jù)集 | 對于大型數(shù)據(jù)集,性能可能不如專用的庫高效 |
| operator 模塊 | 提高可讀性,尤其是在復(fù)雜鍵提取的情況下 | 仍然是基于 sorted() 的實現(xiàn),對于大型數(shù)據(jù)集,性能有限 |
| pandas 庫 | 高效處理大型數(shù)據(jù)集 提供豐富的數(shù)據(jù)操作功能 | 需要學(xué)習(xí)和掌握 pandas 庫的使用 |
| numpy 庫 | 高效處理數(shù)值數(shù)據(jù) 適用于大型數(shù)值數(shù)據(jù)集 | 對于非數(shù)值數(shù)據(jù)(如字符串),可能不如 pandas 方便 |
1. 內(nèi)置 sorted() 函數(shù)與 lambda 表達式
提供一個鍵函數(shù)來實現(xiàn)多重排序
鍵函數(shù)可以是一個 lambda 表達式,用來返回一個元組,元組中的每個元素按照優(yōu)先級進行排序
data = [
{'name': 'Alice', 'age': 30, 'score': 88},
{'name': 'Bob', 'age': 25, 'score': 92},
{'name': 'Charlie', 'age': 30, 'score': 95},
{'name': 'David', 'age': 25, 'score': 85}
]
# 按 age 和 score 排序,age 升序,score 降序
sorted_data = sorted(data, key=lambda x: (x['age'], -x['score']))
print(sorted_data)
截圖大致如下:

sorted() 函數(shù)不僅可以處理數(shù)字?jǐn)?shù)據(jù),還可以處理字符串和其他非數(shù)字?jǐn)?shù)據(jù)
通過 lambda 表達式,可以指定任意的排序邏輯
data = [
{'name': 'Alice', 'department': 'HR', 'role': 'Manager'},
{'name': 'Bob', 'department': 'Engineering', 'role': 'Developer'},
{'name': 'Charlie', 'department': 'HR', 'role': 'Assistant'},
{'name': 'David', 'department': 'Engineering', 'role': 'Manager'}
]
# 按 department 和 role 排序
sorted_data = sorted(data, key=lambda x: (x['department'], x['role']))
print(sorted_data)
數(shù)據(jù)先按 department 字段排序,再按 role 字段排序
2. operator 模塊
from operator import itemgetter
data = [
{'name': 'Alice', 'age': 30, 'score': 88},
{'name': 'Bob', 'age': 25, 'score': 92},
{'name': 'Charlie', 'age': 30, 'score': 95},
{'name': 'David', 'age': 25, 'score': 85}
]
# 按 age 和 score 排序,age 升序,score 降序
sorted_data = sorted(data, key=itemgetter('age', 'score'), reverse=True)
# 注意:要實現(xiàn) age 升序,score 降序,我們需要稍作調(diào)整
sorted_data = sorted(sorted_data, key=itemgetter('age'))
print(sorted_data)
operator 模塊中的 itemgetter 函數(shù)也適用于非數(shù)字?jǐn)?shù)據(jù)的排序
from operator import itemgetter
data = [
{'name': 'Alice', 'department': 'HR', 'role': 'Manager'},
{'name': 'Bob', 'department': 'Engineering', 'role': 'Developer'},
{'name': 'Charlie', 'department': 'HR', 'role': 'Assistant'},
{'name': 'David', 'department': 'Engineering', 'role': 'Manager'}
]
# 按 department 和 role 排序
sorted_data = sorted(data, key=itemgetter('department', 'role'))
print(sorted_data)
3. pandas 庫
大型數(shù)據(jù)集,使用 pandas 庫可以更高效地進行多重排序
import pandas as pd
data = [
{'name': 'Alice', 'age': 30, 'score': 88},
{'name': 'Bob', 'age': 25, 'score': 92},
{'name': 'Charlie', 'age': 30, 'score': 95},
{'name': 'David', 'age': 25, 'score': 85}
]
df = pd.DataFrame(data)
# 按 age 升序和 score 降序排序
sorted_df = df.sort_values(by=['age', 'score'], ascending=[True, False])
print(sorted_df)
同樣可處理非數(shù)字
import pandas as pd
data = [
{'name': 'Alice', 'department': 'HR', 'role': 'Manager'},
{'name': 'Bob', 'department': 'Engineering', 'role': 'Developer'},
{'name': 'Charlie', 'department': 'HR', 'role': 'Assistant'},
{'name': 'David', 'department': 'Engineering', 'role': 'Manager'}
]
df = pd.DataFrame(data)
# 按 department 和 role 排序
sorted_df = df.sort_values(by=['department', 'role'])
print(sorted_df)
4. numpy 庫
適用于數(shù)值數(shù)據(jù)
import numpy as np
data = np.array([
('Alice', 30, 88),
('Bob', 25, 92),
('Charlie', 30, 95),
('David', 25, 85)
], dtype=[('name', 'U10'), ('age', 'i4'), ('score', 'i4')])
# 按 age 升序和 score 降序排序
sorted_data = np.sort(data, order=['age', 'score'])[::-1]
sorted_data = np.sort(sorted_data, order=['age'])
print(sorted_data)
5. 自定義
某些情況下,可能需要更復(fù)雜的排序邏輯,可以定義自定義排序函數(shù)并將其傳遞給 sorted() 函數(shù)
data = [
{'name': 'Alice', 'department': 'HR', 'role': 'Manager'},
{'name': 'Bob', 'department': 'Engineering', 'role': 'Developer'},
{'name': 'Charlie', 'department': 'HR', 'role': 'Assistant'},
{'name': 'David', 'department': 'Engineering', 'role': 'Manager'}
]
# 自定義排序函數(shù)
def custom_sort(item):
return (item['department'], item['role'])
# 按 department 和 role 排序
sorted_data = sorted(data, key=custom_sort)
print(sorted_data)
截圖如下:

到此這篇關(guān)于python3多重排序處理多數(shù)據(jù)的示例詳解的文章就介紹到這了,更多相關(guān)python3多重排序處理多數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
matplotlib 生成的圖像中無法顯示中文字符的解決方法
這篇文章主要介紹了matplotlib 生成的圖像中無法顯示中文字符的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Gradio構(gòu)建交互式Python應(yīng)用使用示例詳解
這篇文章主要為大家介紹了Gradio構(gòu)建交互式Python應(yīng)用使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
Pandas中字符串處理的核心方法與正則匹配實戰(zhàn)教學(xué)
本文介紹了Pandas中字符串處理的核心方法,重點講解了str訪問器的常用操作技巧,包括字符串分割、拼接、替換與提取等,同時深入講解了正則表達式的基礎(chǔ)語法及其在Pandas中的應(yīng)用,希望幫助大家掌握高效處理文本數(shù)據(jù)的技能2026-05-05
python爬蟲開發(fā)之selenium模塊詳細使用方法與實例全解
這篇文章主要介紹了python爬蟲開發(fā)之selenium模塊詳細使用方法與實例全解,selenium模塊詳細在爬蟲開發(fā)中主要用來解決JavaScript渲染問題需要的朋友可以參考下2020-03-03

