我有这些数据:
self.data = [(1, 1, 5.0),
(1, 2, 3.0),
(1, 3, 4.0),
(2, 1, 4.0),
(2, 2, 2.0)]
当我运行以下代码时:
for mid, group in itertools.groupby(self.data, key=operator.itemgetter(0)):
对于 list(group)
,我得到:
[(1, 1, 5.0),
(1, 2, 3.0),
(1, 3, 4.0)]
这是我想要的。 但如果我使用1而不是0。
for mid, group in itertools.groupby(self.data, key=operator.itemgetter(1)):
要按元组中第二个数字进行分组,我只能得到:
[(1, 1, 5.0)]
即使在该位置(第二个位置)有其他元组也有“1”。
grouped = {}
然后for v in self.data: grouped.setdefault(v[1], []).append(v)
。排序是一个 O(NlogN) 的操作,而使用字典来分组值可以在 O(N) 时间内完成任务。 - Martijn Pieters