Чтобы проиллюстрировать это, я начинаю со списка из двух кортежей:
import itertools
import operator
raw = [(1, "one"),
(2, "two"),
(1, "one"),
(3, "three"),
(2, "two")]
for key, grp in itertools.groupby(raw, key=lambda item: item[0]):
print key, list(grp).pop()[1]
Выходы:
1 one
2 two
1 one
3 three
2 two
В попытке выяснить, почему:
for key, grp in itertools.groupby(raw, key=lambda item: item[0]):
print key, list(grp)
# ---- OUTPUT ----
1 [(1, 'one')]
2 [(2, 'two')]
1 [(1, 'one')]
3 [(3, 'three')]
2 [(2, 'two')]
Даже это даст мне тот же результат:
for key, grp in itertools.groupby(raw, key=operator.itemgetter(0)):
print key, list(grp)
Я хочу получить что-то вроде:
1 one, one
2 two, two
3 three
Я думаю, это потому, что ключ находится внутри кортежа в списке, когда на самом деле кортеж перемещается как единое целое. Есть ли способ получить желаемый результат? Может быть, groupby()
не подходит для этой задачи?