python3多重排序处理多数据的示例详解

 更新时间:2024年07月24日 11:15:55   作者:码农研究僧  
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多重排序处理多数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Ruby元编程基础学习笔记整理

    Ruby元编程基础学习笔记整理

    元编程Metaprogramming是指编写能够操作其他程序的程序,例如C语言中的宏,是编程中的一项高级技巧,这里我们立足基础,来看一下Ruby元编程基础学习笔记整理.
    2016-07-07
  • Python MD5文件生成码

    Python MD5文件生成码

    用python实现文件md5生成码核心实现代码。
    2009-01-01
  • python报错解决之python运行bat文件的各种问题处理

    python报错解决之python运行bat文件的各种问题处理

    这篇文章主要介绍了python报错解决之python运行bat文件的各种问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • 浅谈解除装饰器作用(python3新增)

    浅谈解除装饰器作用(python3新增)

    今天小编就为大家分享一篇浅谈解除装饰器作用(python3新增),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python subprocess模块常见用法分析

    Python subprocess模块常见用法分析

    这篇文章主要介绍了Python subprocess模块常见用法,结合实例形式分析了subprocess模块进程操作相关使用技巧与注意事项,需要的朋友可以参考下
    2018-06-06
  • 基于Python编写一个宝石消消乐小游戏

    基于Python编写一个宝石消消乐小游戏

    快过年回家啦用,本文将为大家介绍一个用python编写的宝石消消乐游戏用来哄小朋友,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
    2022-01-01
  • Python装饰器详情

    Python装饰器详情

    这篇文章主要介绍了Python装饰器,装饰器Decorator从字面上理解,就是装饰对象的器件,其的特点是特点是函数是作为其参数出现的,装饰器还拥有闭包的特点,下面来看看文中的具体内容
    2021-11-11
  • Python中itertools库的四个函数介绍

    Python中itertools库的四个函数介绍

    这篇文章主要介绍了Python中itertools库的四个函数,主要讨论itertools库中的十分使用的几个函数,并重点介绍什么时候我们应该考虑使用它们,需要的朋友可以参考一下
    2022-04-04
  • Python  序列化反序列化和异常处理的问题小结

    Python  序列化反序列化和异常处理的问题小结

    这篇文章主要介绍了Python 序列化反序列化和异常处理,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • Gradio机器学习模型快速部署工具应用分享前篇

    Gradio机器学习模型快速部署工具应用分享前篇

    这篇文章主要为大家介绍了Gradio机器学习模型快速部署工具应用分享前篇,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04

最新评论