python3多重排序处理多数据的示例详解
作者:码农研究僧
Python3的多重排序通常指的是对数据集合按照两个或多个人数属性进行排序的过程,这可以通过将多个排序关键字作为元组传递给内置的sorted()函数或者是使用列表推导式结合lambda函数完成,本文详细分析了python3多重排序处理多数据,需要的朋友可以参考下
前言
主要讲解多种方式的处理,以实际的Demo为主
方法 | 优点 | 缺点 |
---|---|---|
内置 sorted() 函数与 lambda 表达式 | 简单易用,代码简洁 适合处理较小的数据集 | 对于大型数据集,性能可能不如专用的库高效 |
operator 模块 | 提高可读性,尤其是在复杂键提取的情况下 | 仍然是基于 sorted() 的实现,对于大型数据集,性能有限 |
pandas 库 | 高效处理大型数据集 提供丰富的数据操作功能 | 需要学习和掌握 pandas 库的使用 |
numpy 库 | 高效处理数值数据 适用于大型数值数据集 | 对于非数值数据(如字符串),可能不如 pandas 方便 |
1. 内置 sorted() 函数与 lambda 表达式
提供一个键函数来实现多重排序
键函数可以是一个 lambda 表达式,用来返回一个元组,元组中的每个元素按照优先级进行排序
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() 函数不仅可以处理数字数据,还可以处理字符串和其他非数字数据
通过 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)
数据先按 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) # 注意:要实现 age 升序,score 降序,我们需要稍作调整 sorted_data = sorted(sorted_data, key=itemgetter('age')) print(sorted_data)
operator 模块中的 itemgetter 函数也适用于非数字数据的排序
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 库
大型数据集,使用 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)
同样可处理非数字
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 库
适用于数值数据
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. 自定义
某些情况下,可能需要更复杂的排序逻辑,可以定义自定义排序函数并将其传递给 sorted() 函数
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'} ] # 自定义排序函数 def custom_sort(item): return (item['department'], item['role']) # 按 department 和 role 排序 sorted_data = sorted(data, key=custom_sort) print(sorted_data)
截图如下:
到此这篇关于python3多重排序处理多数据的示例详解的文章就介绍到这了,更多相关python3多重排序处理多数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!