To illustrate, I start with a list of 2-tuples:
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]
yields:
1 one
2 two
1 one
3 three
2 two
In an attempt to investigate why:
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')]
Even this will give me the same output:
for key, grp in itertools.groupby(raw, key=operator.itemgetter(0)):
print key, list(grp)
I want to get something like:
1 one, one
2 two, two
3 three
I am thinking this is because the key is within the tuple inside the list, when in fact the tuple gets moved around as one. Is there a way to get to my desired output? Maybe groupby() isn’t suited for this task?
groupbyclusters consecutive elements of the iterable which have the same key.To produce the output you desire, you must first sort
raw.