欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python3多重排序處理多數(shù)據(jù)的示例詳解

 更新時間:2024年07月24日 11:15:55   作者:碼農(nóng)研究僧  
Python3的多重排序通常指的是對數(shù)據(jù)集合按照兩個或多個人數(shù)屬性進行排序的過程,這可以通過將多個排序關(guān)鍵字作為元組傳遞給內(nèi)置的sorted()函數(shù)或者是使用列表推導(dǎo)式結(jié)合lambda函數(shù)完成,本文詳細分析了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)文章

最新評論