【发布时间】:2021-01-05 13:35:47
【问题描述】:
假设我有一本这样的字典:
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')]]
有谁知道为什么以及如何防止这种情况发生?
【问题讨论】:
-
输出正是你应该得到的;您原来的
dict具有几乎相同的订单(忽略批次边界)这一事实是巧合。 -
您期望得到什么输出?将
b的元素分组,自然会改变它们的顺序。请注意,每个组的顺序仍然正确。
标签: python python-3.x sorting tuples