An example problem. The actual problem uses datetimes but this simplifies it for this example
unordered_list = [Class(letter='A', value=5), 
                  Class(letter='B', value=3), 
                  Class(letter='C', value=2), 
                  Class(letter='D', value=8), 
                  Class(letter='E', value=5), 
                  Class(letter='F', value=8)]
sorted_list = fun(unordered_list)
expected_result = [Class(letter='C', value=2),
                   Class(letter='B', value=3),
                   (Class(letter='A', value=5), Class(letter='E', value=5)),
                   (Class(letter='D', value=8), Class(letter='F', value=8))]
# or
expected_result = [(Class(letter='C', value=2)),
                   (Class(letter='B', value=3)),
                   (Class(letter='A', value=5), Class(letter='E', value=5)),
                   (Class(letter='D', value=8), Class(letter='F', value=8))]
I don't really mind what format they're in; list, set, tuple I'm not picky.
I've had a go at answering the question myself below. However I think there is a faster or more pythonic method.
Bit of extra code if you want to run the example problem
class Class:
    def __init__(self, letter, value):
        self.letter = letter
        self.value = value
    def __str__(self):
        return self.letter+'->'+str(self.value)
The python sort method (sorted(unordered_list, key=lambda x: x.value)) does not solve this problem by itself because items of the same value aren't grouped
