python - 对元组列表进行排序实际上并没有对它们进行排序
问题描述
假设我有一本这样的字典:
a = {1:"a", 3:"c", 5:"e", 4:"d" ,2:"b", 6:"f", 7:"g"}
我将其转换为元组列表:
b = list(a.items())
现在,我想根据元组的第一个值对列表进行排序。我有三种方法可以做到这一点:
from operator import itemgetter
b.sort(key=itemgetter(0))
b.sort(key=lambda x: x[::-1])
b = sorted(b, key=lambda t: (t[0]))
在任何一种情况下,如果我打印,b
我都会得到排序列表:
print(b)
>>> [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e'), (6, 'f'), (7, 'g')]
但是,如果我实际b
在一个进程中使用,结果是它没有排序。我测试了一些东西,但目前我手头的东西是这样的:
batch_count = len(b) // 3
batches = [[] for _ in range(batch_count)]
for index, vec in enumerate(b):
batches[index % batch_count].append(vec)
这组b
到至少 3 个列表。batches
但是,如果我打印,我会从 获得原始订单,但预期a
除外。7
print(batches)
>>> [[(1, 'a'), (3, 'c'), (5, 'e'), (7, 'g')], [(2, 'b'), (4, 'd'), (6, 'f')]]
有谁知道为什么以及如何防止这种情况发生?
解决方案
这不是同一个顺序。由于index % batch_count
.
如果 abatch_count
为 2,则您有index % 2
,它将在0
和之间交替1
:
>>> [i % 2 for i in range(10)]
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
最终结果是在第一个子集合中保持偶数位置,在第二个子集合中保持赔率。
推荐阅读
- sql - Kotlin 暴露了 DSL 查询映射
- python - 如何使用正则表达式匹配包含横线的字符串?
- c# - 将leaft浏览器转换为硒驱动程序
- html - Angular:输入元素上的 *ngIf 标记导致它未定义。无法从输入字段中读取值
- javascript - 自动完成下拉菜单 - 添加时间延迟并等待至少 3 个字符输入
- deeplearning4j - Deeplearning4j 重复方法调用
- python - Keras CNN 架构
- javascript - 如何在每个矩形端点中绘制圆圈
- sql-server - MS SQL Connect 给出错误 mssql: A SQL editor must have focus
- .net-core - Add-Migration 或 dotnet ef 迁移添加