from collections import defaultdict

d = {
    'movie_1': {
        ('Bob', 5), ('Carrie', 5), ('Alan', 1), ('Diane', 1)
    },
    'movie_2': {
        ('Carrie', 3), ('Diane', 3), ('Bob', 3)
    },
    'movie_3': {('Alan', 2), ('Diane', 5)},
    'movie_4': {('Carrie', 2), ('Alan', 5)} 
}

def setlist(size):
    def gen():
        return [set() for _ in range(size)]
    return gen

def get_max_index(d):
    return max(score for ranking in d.values() for _, score in ranking)

def rearrange(d, max_index=None):
    if max_index is None:
        max_index = get_max_index(d)
    output = defaultdict(setlist(max_index + 1))
    for movie, ranking in d.items():
        for person, score in ranking:
            output[person][score].add(movie)
    return output

print(rearrange(d))