Python如何将包含指定元素GROUP4的嵌套子列表移动到列表末尾
Python嵌套列表自定义排序实现方案
需求说明
现有嵌套列表结构,每个子列表索引为3的位置是分组标识,需要满足:
- 所有分组为
GROUP4的子列表统一放在列表末尾 - 其余分组的子列表按分组标识正常排序
- 即使存在
GROUP5、GROUP6等更高序号的分组,GROUP4仍然保持在末尾位置
最优实现代码
直接通过自定义排序键实现,无需拆分列表:
requests.sort(key=lambda x: (x[3] == "GROUP4", x[3], x[4]))
逻辑说明
Python的sorted和list.sort()方法支持传入返回元组的key函数,排序时会按元组元素优先级依次比较:
- 第一优先级:
x[3] == "GROUP4"的判断结果,布尔值排序时False对应权重0、True对应权重1,因此所有非GROUP4的项会全部排在GROUP4项前面 - 第二优先级:非
GROUP4的项按分组标识的字典序正常排序,符合原有排序逻辑 - 第三优先级:同一分组下可按索引为4的序号字段排序,不需要该规则可直接删除第三个元组元素
备选实现(可读性更高)
如果后续需要分别调整两组的排序规则,可拆分列表后再合并:
# 拆分两组数据 normal_groups = [item for item in requests if item[3] != "GROUP4"] group4 = [item for item in requests if item[3] == "GROUP4"] # 分别按需求排序 normal_groups.sort(key=lambda x: x[3]) group4.sort(key=lambda x: x[4]) # 合并得到最终结果 requests = normal_groups + group4
内容的提问来源于stack exchange,提问作者Chiser Alexandru
相关产品推荐
相关产品推荐

