output = defaultdict(list)
for item, cat in ((x[:-1], x[-1]) for x in data):
output[cat].append(item)
или без указания по умолчанию:
output = {}
for item, cat in ((x[:-1], x[-1]) for x in data):
output.setdefault(cat, []).append(item)
Пример вывода:
>>> data = [
... (1, 123, "somedate", "boy"),
... (3, 435, "anotherdate", "boy"),
... (23, 123, "moredate", "girl"),
... ]
>>> output = {}
>>> for item, cat in ((x[:-1], x[-1]) for x in data):
... output.setdefault(cat, []).append(item)
...
>>> print output
{'boy': [(1, 123, 'somedate'), (3, 435, 'anotherdate')], 'girl': [(23, 123, 'moredate')]}