Python中按字典值对字典列表进行排序的方法

Python中按字典值对字典列表进行排序的方法

技术背景

在Python编程中,我们经常会遇到需要对列表中的字典元素按照某个特定键的值进行排序的情况。例如,有一个包含人物信息的字典列表,我们可能需要按照人物的年龄或者姓名进行排序。Python提供了多种方法来实现这一需求,下面将详细介绍这些方法。

实现步骤

使用sorted()函数和lambda表达式

1
2
3
list_to_be_sorted = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}]
newlist = sorted(list_to_be_sorted, key=lambda d: d['name'])
print(newlist)

上述代码中,sorted()函数的key参数接受一个lambda函数,该函数用于指定排序的依据。这里我们根据字典中name键的值进行排序。

使用sorted()函数和operator.itemgetter

1
2
3
4
from operator import itemgetter
list_to_be_sorted = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}]
newlist = sorted(list_to_be_sorted, key=itemgetter('name'))
print(newlist)

operator.itemgetter是Python标准库中的一个函数,它可以用来获取对象的特定属性。这里我们使用它来获取字典中name键的值进行排序。

降序排序

1
2
3
4
from operator import itemgetter
list_to_be_sorted = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}]
newlist = sorted(list_to_be_sorted, key=itemgetter('name'), reverse=True)
print(newlist)

通过设置sorted()函数的reverse参数为True,可以实现降序排序。

对列表进行原地排序

1
2
3
4
import operator
list_of_dicts = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}]
list_of_dicts.sort(key=operator.itemgetter('name'))
print(list_of_dicts)

使用列表的sort()方法可以对列表进行原地排序,不会返回新的列表。

按多个键排序

1
2
3
my_list = [{'name':'Homer', 'age':39}, {'name':'Milhouse', 'age':10}, {'name':'Bart', 'age':10} ]
sortedlist = sorted(my_list , key=lambda elem: (elem['age'], elem['name']))
print(sortedlist)

通过在lambda函数中返回一个元组,可以实现按多个键排序。这里先按age排序,再按name排序。

处理缺失键的情况

1
2
3
lst = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}, {'name': 'Lisa'}]
sorted_lst = sorted(lst, key=lambda d: d.get('age', float('inf')))
print(sorted_lst)

使用dict.get()方法可以处理列表中某些字典缺失排序键的情况。这里将缺失age键的字典放到排序结果的末尾。

核心代码

使用sorted()lambda

1
2
list_to_sort = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}]
sorted_list = sorted(list_to_sort, key=lambda x: x['name'])

使用sorted()operator.itemgetter

1
2
3
from operator import itemgetter
list_to_sort = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}]
sorted_list = sorted(list_to_sort, key=itemgetter('name'))

原地排序

1
2
3
import operator
list_to_sort = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}]
list_to_sort.sort(key=operator.itemgetter('name'))

最佳实践

  • 性能考虑:当对性能有较高要求时,建议使用operator.itemgetter,因为它的执行速度比lambda函数略快。
  • 代码可读性:如果排序逻辑较为简单,使用lambda函数可以使代码更简洁易读;如果排序逻辑复杂,建议将排序函数单独定义。
  • 处理缺失键:使用dict.get()方法可以避免因字典中缺失排序键而引发的KeyError异常。

常见问题

KeyError异常

当列表中的某些字典缺失排序键时,使用d['key']的方式会引发KeyError异常。解决方法是使用d.get('key'),并可以提供一个默认值。

排序顺序问题

默认情况下,sorted()sort()函数是升序排序。如果需要降序排序,可设置reverse=True参数。

按多个键排序的顺序问题

在按多个键排序时,要注意元组中键的顺序,它决定了排序的优先级。例如,(elem['age'], elem['name'])表示先按age排序,再按name排序。


Python中按字典值对字典列表进行排序的方法
https://119291.xyz/posts/2025-04-14.sorting-a-list-of-dictionaries-by-dictionary-value-in-python/
作者
ww
发布于
2025年4月14日
许可协议