欢迎访问宙启技术站
智能推送

使用Python中的sorted函数对列表进行基于特定键的排序

发布时间:2023-05-23 11:00:06

在Python中,可以使用内置的sorted函数对列表进行排序。这个函数可以接受一个可迭代对象作为参数(通常是一个列表)以及一个关键字参数key,key可以指定用于排序的键。

默认情况下,sorted函数会按照元素的自然顺序进行排序。对于数字和字符串,自然顺序是很明显的。但是对于自定义对象,或者需要基于某个特定键进行排序的场景,就需要使用key参数。

看下面的这个例子。我们有一个包含字典对象的列表,每个字典对象都有一个name键,表示一个人的名字。我们要对这个列表按照人名的字母顺序进行排序:

people = [
    {'name': 'Alice', 'age': 25},
    {'name': 'Bob', 'age': 20},
    {'name': 'Charlie', 'age': 30},
    {'name': 'David', 'age': 28}
]

sorted_people = sorted(people, key=lambda x: x['name'])

print(sorted_people)
# [{'name': 'Alice', 'age': 25}, 
#  {'name': 'Bob', 'age': 20}, 
#  {'name': 'Charlie', 'age': 30}, 
#  {'name': 'David', 'age': 28}]

上面的代码中,我们传入了一个lambda函数作为key参数。这个lambda函数接受一个字典对象x作为参数,并返回x['name']作为排序用的键。排序后的结果符合我们的预期。

除了lambda函数以外,我们还可以传入一个普通的函数或者方法作为key参数。比如,我们可以定义一个函数,接受一个人的字典对象作为参数,返回这个人的年龄作为键:

def get_age(person):
    return person['age']

sorted_people = sorted(people, key=get_age)

print(sorted_people)
# [{'name': 'Bob', 'age': 20}, 
#  {'name': 'Alice', 'age': 25}, 
#  {'name': 'David', 'age': 28}, 
#  {'name': 'Charlie', 'age': 30}]

通过传入不同的排序键,我们可以对列表进行不同的排序。如果我们想按照年龄从大到小的顺序进行排序,只需要传入lambda函数或者普通函数,将age反转即可:

sorted_people = sorted(people, key=lambda x: x['age'], reverse=True)

print(sorted_people)
# [{'name': 'Charlie', 'age': 30}, 
#  {'name': 'David', 'age': 28}, 
#  {'name': 'Alice', 'age': 25}, 
#  {'name': 'Bob', 'age': 20}]

在排序时,key参数表示的是一个函数或方法,并不表示一个键。这个函数或方法接受一个列表中的元素作为参数,并返回一个用于排序的键。因此,在使用key参数时,需要确保函数或方法返回的值可以进行比较。比如,如果返回的是一个列表,那么就无法进行比较,从而导致排序失败。