使用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参数时,需要确保函数或方法返回的值可以进行比较。比如,如果返回的是一个列表,那么就无法进行比较,从而导致排序失败。
