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

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

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

前言

主要講解多種方式的處理,以實(shí)際的Demo為主

方法優(yōu)點(diǎn)缺點(diǎn)
內(nèi)置 sorted() 函數(shù)與 lambda 表達(dá)式簡(jiǎn)單易用,代碼簡(jiǎn)潔
適合處理較小的數(shù)據(jù)集
對(duì)于大型數(shù)據(jù)集,性能可能不如專用的庫(kù)高效
operator 模塊提高可讀性,尤其是在復(fù)雜鍵提取的情況下仍然是基于 sorted() 的實(shí)現(xiàn),對(duì)于大型數(shù)據(jù)集,性能有限
pandas 庫(kù)高效處理大型數(shù)據(jù)集
提供豐富的數(shù)據(jù)操作功能
需要學(xué)習(xí)和掌握 pandas 庫(kù)的使用
numpy 庫(kù)高效處理數(shù)值數(shù)據(jù)
適用于大型數(shù)值數(shù)據(jù)集
對(duì)于非數(shù)值數(shù)據(jù)(如字符串),可能不如 pandas 方便

1. 內(nèi)置 sorted() 函數(shù)與 lambda 表達(dá)式

提供一個(gè)鍵函數(shù)來實(shí)現(xiàn)多重排序

鍵函數(shù)可以是一個(gè) lambda 表達(dá)式,用來返回一個(gè)元組,元組中的每個(gè)元素按照優(yōu)先級(jí)進(jìn)行排序

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 表達(dá)式,可以指定任意的排序邏輯

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)
# 注意:要實(shí)現(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 庫(kù)

大型數(shù)據(jù)集,使用 pandas 庫(kù)可以更高效地進(jìn)行多重排序

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 庫(kù)

適用于數(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論