sort list and dict

博客提供了一个链接http://blog.alexa-pro.cn/?p=234 ,未包含其他关键信息技术信息。
在 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]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值