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ù)字數(shù)據(jù),還可以處理字符串和其他非數(shù)字數(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ù)字數(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)文章
python實現(xiàn)通過flask和前端進行數(shù)據(jù)收發(fā)
今天小編就為大家分享一篇python實現(xiàn)通過flask和前端進行數(shù)據(jù)收發(fā),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08Python實現(xiàn)兩個list求交集,并集,差集的方法示例
這篇文章主要介紹了Python實現(xiàn)兩個list求交集,并集,差集的方法,結(jié)合實例形式分析了Python使用intersection、union及difference方法實現(xiàn)兩個集合list的交集、并集與差集操作技巧,需要的朋友可以參考下2018-08-08win7上python2.7連接mysql數(shù)據(jù)庫的方法
這篇文章主要介紹了win7上python2.7連接mysql數(shù)據(jù)庫的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01PyQt5每天必學(xué)之日歷控件QCalendarWidget
這篇文章主要為大家詳細介紹了PyQt5每天必學(xué)之日歷控件QCalendarWidget,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04使用Python實現(xiàn)簡單的數(shù)據(jù)備份
數(shù)據(jù)備份,即數(shù)據(jù)的復(fù)制和存儲,是指將數(shù)據(jù)從一個位置復(fù)制到另一個位置,以防止原始數(shù)據(jù)丟失或損壞,下面我們就來了解一下用Python如何實現(xiàn)這一功能吧2025-03-03python腳本實現(xiàn)統(tǒng)計日志文件中的ip訪問次數(shù)代碼分享
這篇文章主要介紹了python腳本實現(xiàn)統(tǒng)計日志文件中的ip訪問次數(shù)代碼分享,注意此腳本只適用ip在每行開頭的日志文件,需要的朋友可以參考下2014-08-08python 接口實現(xiàn) 供第三方調(diào)用的例子
今天小編就為大家分享一篇python 接口實現(xiàn) 供第三方調(diào)用的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08