def groupbyUnsorted(input, key=lambda x:x):
yielded = set()
keys = [ key(element) for element in input ]
for i, wantedKey in enumerate(keys):
if wantedKey not in yielded:
yield (wantedKey,
(input[j] for j in range(i, len(input)) if keys[j] == wantedKey))
yielded.add(wantedKey)