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多重排序处理多数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python实现通过flask和前端进行数据收发

    python实现通过flask和前端进行数据收发

    今天小编就为大家分享一篇python实现通过flask和前端进行数据收发,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python实现两个list求交集,并集,差集的方法示例

    Python实现两个list求交集,并集,差集的方法示例

    这篇文章主要介绍了Python实现两个list求交集,并集,差集的方法,结合实例形式分析了Python使用intersection、union及difference方法实现两个集合list的交集、并集与差集操作技巧,需要的朋友可以参考下
    2018-08-08
  • win7上python2.7连接mysql数据库的方法

    win7上python2.7连接mysql数据库的方法

    这篇文章主要介绍了win7上python2.7连接mysql数据库的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Python求均值,方差,标准差的实例

    Python求均值,方差,标准差的实例

    今天小编就为大家分享一篇Python求均值,方差,标准差的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • PyQt5每天必学之日历控件QCalendarWidget

    PyQt5每天必学之日历控件QCalendarWidget

    这篇文章主要为大家详细介绍了PyQt5每天必学之日历控件QCalendarWidget,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • tensorflow 自定义损失函数示例代码

    tensorflow 自定义损失函数示例代码

    这篇文章主要介绍了tensorflow 自定义损失函数示例,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 使用Python实现简单的数据备份

    使用Python实现简单的数据备份

    数据备份,即数据的复制和存储,是指将数据从一个位置复制到另一个位置,以防止原始数据丢失或损坏,下面我们就来了解一下用Python如何实现这一功能吧
    2025-03-03
  • python脚本实现统计日志文件中的ip访问次数代码分享

    python脚本实现统计日志文件中的ip访问次数代码分享

    这篇文章主要介绍了python脚本实现统计日志文件中的ip访问次数代码分享,注意此脚本只适用ip在每行开头的日志文件,需要的朋友可以参考下
    2014-08-08
  • python合并多个excel的详细过程

    python合并多个excel的详细过程

    合并需求很多,常见的有相同数据结构,按行进行纵向拼接,下面这篇文章主要给大家介绍了关于python合并多个excel的相关资料,需要的朋友可以参考下
    2022-10-10
  • python 接口实现 供第三方调用的例子

    python 接口实现 供第三方调用的例子

    今天小编就为大家分享一篇python 接口实现 供第三方调用的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08

最新评论