GatherBy[data, First]
or
GroupBy[data, First]
(I think you're missing an element in your list4.)
Thanks, Eric.
That is a great solution way.
It may be more convenient to use this form depending on what you want to do next
grouped = GroupBy[data, First -> Last]
E.g.
{Mean@#, Median@#, StandardDeviation@#} & /@ grouped