python - 当第一个元素匹配时如何对嵌套列表进行排序?
问题描述
我有一个嵌套列表,它根据每个子列表的第一个元素进行排序:
t = [['2', '5'], ['8', '10'], ['8', '2'], ['8', '5'], ['9', '0']]
我现在如何按下一个元素对以相同元素开头的子列表进行排序而不影响其他子列表?
例如对 t[1]、t[2] 和 t[3] 进行排序,同时保持其他子列表的顺序:
sort_by_all(t)
>> [['2', '5'], ['8', '2'], ['8', '5'], ['8', '10'], ['9', '0']]
我的逻辑是首先找到所有以相同元素开头的子列表,按它们的第二个元素对它们进行排序,然后以某种方式将它们放回原始列表中。
解决方案
sorted
并且list.sort
都可以按字典顺序排序。换句话说,您可以传入一个返回序列的键。在这种情况下,您希望首先将任何值转换为整数。
t = [['2', '5'], ['8', '10'], ['8', '2'], ['8', '5'], ['9', '0']]
# Create new list
print(sorted(t, key=lambda seq: (int(seq[0]), int(seq[1]))))
# Or, sort in place
t.sort(key=lambda seq: (int(seq[0]), int(seq[1])))
print(t)
# Output
[['2', '5'], ['8', '2'], ['8', '5'], ['8', '10'], ['9', '0']]
[['2', '5'], ['8', '2'], ['8', '5'], ['8', '10'], ['9', '0']]
如果您希望它适用于每个子列表具有两个以上元素的列表,请将键替换为:
lambda seq: [int(i) for i in seq]
推荐阅读
- python - 使用 ModelSerializer 序列化一对多关系
- python - AWS Athena - 获取当前日期的 QueryExecutionIds
- r - R. 使用 R. 预测时间序列。无法绘制自动图层
- java - 用 Java 设计 JSON
- java - 快速字节数组反序列化
- mysql - 触发 SQL 表停车率
- javascript - 如何使文本对齐适用于强标签?
- django - 如何在不使用 for 循环的情况下以弹出模式显示数据?
- java - MessagingErrorCode 的成员对应的错误码是什么?
- python - 将yolov4权重转换为tflite时如何解决reshape ValueError?