在 Python 中,对包含字典的列表(`list[dict]`)进行排序有多种方法:
### 使用 `sorted()` 函数结合 `operator.itemgetter`
`operator.itemgetter` 可以方便地从字典中获取指定键的值,用于排序依据。使用时需要导入该模块。示例代码如下:
```python
from operator import itemgetter
lst = [{'level': 19, 'star': 36, 'time': 1}, {'level': 20, 'star': 40, 'time': 2}, {'level': 20, 'star': 40, 'time': 3}, {'level': 20, 'star': 40, 'time': 4}, {'level': 20, 'star': 40, 'time': 5}, {'level': 18, 'star': 40, 'time': 1}]
# 按 level 排序
sorted_lst = sorted(lst, key=itemgetter('level'))
print(sorted_lst)
```
这里使用 `sorted()` 函数,其原型为 `sorted(iterable[,key][,reverse])`,通过 `itemgetter('level')` 作为 `key` 参数,以字典中的 `level` 键的值作为排序依据 [^3]。
### 使用 `sorted()` 函数结合 `lambda` 表达式
`lambda` 表达式可以创建一个匿名函数,更灵活地定义排序规则。示例代码如下:
```python
lst = [{'level': 19, 'star': 36, 'time': 1}, {'level': 20, 'star': 40, 'time': 2}, {'level': 20, 'star': 40, 'time': 3}, {'level': 20, 'star': 40, 'time': 4}, {'level': 20, 'star': 40, 'time': 5}, {'level': 18, 'star': 40, 'time': 1}]
# 按 level 排序
sorted_lst = sorted(lst, key=lambda e: e['level'])
print(sorted_lst)
```
这里通过 `lambda e: e['level']` 作为 `key` 参数,以字典中的 `level` 键的值作为排序依据。也可以使用 `e.get('level')` 或者 `e.__getitem__('level')` 这样的方式去获取键的值 [^3]。
### 使用 `list.sort()` 方法结合 `lambda` 表达式
`list.sort()` 方法可以直接在原列表上进行排序,没有返回值。示例代码如下:
```python
lst = [{'level': 19, 'star': 36, 'time': 1}, {'level': 20, 'star': 40, 'time': 2}, {'level': 20, 'star': 40, 'time': 3}, {'level': 20, 'star': 40, 'time': 4}, {'level': 20, 'star': 40, 'time': 5}, {'level': 18, 'star': 40, 'time': 1}]
# 需求: level越大越靠前; level相同, star越大越靠前; level和star相同, time越小越靠前;
# 先按 time 排序
lst.sort(key=lambda k: (k.get('time', 0)))
# 再按照 level 和 star 顺序,reverse=True 表示反序排列,默认正序排列
lst.sort(key=lambda k: (k.get('level', 0), k.get('star', 0)), reverse=True)
print(lst)
```
这里先按 `time` 排序,再按 `level` 和 `star` 排序,通过多次调用 `sort()` 方法并结合 `lambda` 表达式实现多条件排序 [^5]。