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技术站