python3 sorted 如何实现自定义排序标准

yizhihongxing

Python3中的sorted()函数可以按指定的规则对一个可迭代对象进行排序,默认是按照对象元素大小进行排序。但是,有时候我们需要按照自定义的规则进行排序,比如按照一个对象的某个属性进行排序。这时我们可以使用sorted()函数的key参数和cmp参数来实现自定义排序。

key参数实现自定义排序

key参数用来指定一个函数,此函数会在每个元素上执行,将元素转换为排序用的键值,最后对键值进行排序。

例如,我们有一个存储员工信息的列表,每个员工信息是一个字典。现在要按照员工工资的高低进行排序,可以使用key参数实现:

employees = [
    {'name': 'Tom', 'age': 30, 'salary': 5000},
    {'name': 'Jack', 'age': 25, 'salary': 8000},
    {'name': 'Mike', 'age': 35, 'salary': 3000},
    {'name': 'Mary', 'age': 28, 'salary': 6000}
]

# 按工资从高到低排序
sorted_employees = sorted(employees, key=lambda x: x['salary'], reverse=True)
print(sorted_employees)

输出结果为:

[{'name': 'Jack', 'age': 25, 'salary': 8000},
 {'name': 'Mary', 'age': 28, 'salary': 6000},
 {'name': 'Tom', 'age': 30, 'salary': 5000},
 {'name': 'Mike', 'age': 35, 'salary': 3000}]

上述代码中,我们使用lambda函数来指定排序规则,lambda函数的返回值是字典中的salary值,即按照工资进行排序。由于需要从高到低排序,因此需要设置reverse=True。

注意,在有些情况下,key函数也可以是一个自定义函数,它返回的值将用作排序关键字。

cmp参数实现自定义排序

cmp参数用来指定一个比较函数,此函数接受两个参数(两个需要比较的元素),如果第一个元素比第二个元素大,则返回正整数,如果小则返回负整数,相等则返回0。默认情况下,cmp为None,表示使用Python内置的比较函数进行排序。

下面来看一个使用cmp参数实现自定义排序的例子,按照员工的年龄进行排序:

employees = [
    {'name': 'Tom', 'age': 30, 'salary': 5000},
    {'name': 'Jack', 'age': 25, 'salary': 8000},
    {'name': 'Mike', 'age': 35, 'salary': 3000},
    {'name': 'Mary', 'age': 28, 'salary': 6000}
]

def employee_cmp(e1, e2):
    if e1['age'] > e2['age']:
        return 1
    elif e1['age'] < e2['age']:
        return -1
    else:
        return 0

# 按照年龄从小到大排序
sorted_employees = sorted(employees, cmp=employee_cmp)
print(sorted_employees)

输出结果为:

[{'name': 'Jack', 'age': 25, 'salary': 8000},
 {'name': 'Mary', 'age': 28, 'salary': 6000},
 {'name': 'Tom', 'age': 30, 'salary': 5000},
 {'name': 'Mike', 'age': 35, 'salary': 3000}]

上述代码中,我们定义了一个自定义的比较函数employee_cmp。该函数接受两个参数e1和e2,比较它们的age值,并返回相应的结果。接着,我们使用sorted()函数对employees进行排序,传入参数cmp=employee_cmp,即可按照自定义规则进行排序。

值得一提的是,cmp在Python3中已经被移除,如果要使用自定义排序规则,必须使用key参数。因此,应该优先使用key参数,而非cmp参数。

以上就是实现Python3的sorted如何实现自定义排序标准的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python3 sorted 如何实现自定义排序标准 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • 在python带权重的列表中随机取值的方法

    在Python中,可以通过random.choices方法在带有权重的列表中随机取值,该方法可以根据指定的权重值,生成符合要求的随机数列表。 具体步骤如下: 导入random模块 import random 定义带有权重的列表 假设有一个列表,包含不同的元素和它们的权重值。 my_list = [‘A’, ‘B’, ‘C’, ‘D’] my_weights …

    python 2023年6月3日
    00
  • Python实现从概率分布中随机采样

    接下来我将会详细讲解“Python实现从概率分布中随机采样”的攻略。 1. 什么是概率分布 在详细介绍Python实现从概率分布中随机采样之前,首先需要知道什么是概率分布。 概率分布是指随机变量所有可能取值与相应概率的对应关系。 在Python中,我们可以通过Scipy库中的stats模块来实现概率分布的计算和操作。 2. 从概率分布中随机采样的方法 随机采…

    python 2023年6月3日
    00
  • python爬虫判断招聘信息是否存在的实例代码

    接下来我将详细讲解Python爬虫判断招聘信息是否存在的实例代码的完整攻略。 确认需求 在开始写代码之前,我们要先确认需求。我们需要一个爬虫程序,能够自动获取招聘网站上特定岗位的招聘信息,同时判断是否存在一定的关键词(比如公司名称、工作地点等),并将符合条件的招聘信息保存到本地文件中。 确认网站 在确定需求后,我们需要选择要爬取的招聘网站。由于不同的网站结构…

    python 2023年6月3日
    00
  • python用match()函数爬数据方法详解

    以下是详细讲解“Python用match()函数爬数据方法详解”的完整攻略,包括match()函数的介绍、参数说明、示例说明和注意事项。 match()函数的介绍 在Python中,match()函数是re模块中的一个函数,用于从字符串的开头匹配正则表达式。match()函数的语法如下: re.match(pattern, string, flags=0) …

    python 2023年5月14日
    00
  • Python之parser.add_argument解读

    Python中的argparse模块是用于解析命令行参数和选项的标准模块。add_argument方法是argparse.ArgumentParser类中的一个方法,用于向该类中添加命令行选项和参数。 1. add_argument方法的基本用法 add_argument方法的基本用法如下: parser.add_argument(‘name’, actio…

    python 2023年6月3日
    00
  • Python爬虫爬验证码实现功能详解

    Python爬虫爬验证码实现功能详解 在爬虫过程中,有些网站存在验证码的验证,如果没有正确识别验证码,则无法进一步进行爬虫操作。本文将详细讲解如何使用Python爬虫爬取需要验证码的网站,并通过两个示例说明如何识别验证码。 前置准备 在进行本文的爬虫实例之前,需要先安装相关的模块。我们将使用以下模块: requests: 用于发送HTTP请求,并获取响应数据…

    python 2023年5月19日
    00
  • Python实现杰卡德距离以及环比算法讲解

    Python实现杰卡德距离以及环比算法讲解 杰卡德距离和环比算法是常用的数据分析算法,可以用于计算两个集合之间的相似度和计算环比增长率。在Python中,可以使用numpy库实现卡德离和环比算法。本文将详细讲解Python实现杰卡德距离和环比算法的整个攻略,包括法原理、Python实现过程和示例。 算法原理 杰卡德距离 杰卡德距离是一种常用的似度度量方法,可…

    python 2023年5月14日
    00
  • Python 使用有限迭代器

    Python中的有限迭代器 (finite iterator) 指的是一次性的迭代器,即使用后就不能再次迭代。一些Python内置的函数(如sorted和max)以及一些外部库(如pandas和numpy)也提供了一些有限迭代器。 Python有限迭代器主要有以下几种类型: zip(): 这个函数可以接受任意多个可迭代对象,将它们中对应的元素打包成一个元组(…

    python-answer 2023年3月25日
    00
合作推广
合作推广
分享本页
返回顶部