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))
ZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKCmQgPSB7CiAgICAnbW92aWVfMSc6IHsKICAgICAgICAoJ0JvYicsIDUpLCAoJ0NhcnJpZScsIDUpLCAoJ0FsYW4nLCAxKSwgKCdEaWFuZScsIDEpCiAgICB9LAogICAgJ21vdmllXzInOiB7CiAgICAgICAgKCdDYXJyaWUnLCAzKSwgKCdEaWFuZScsIDMpLCAoJ0JvYicsIDMpCiAgICB9LAogICAgJ21vdmllXzMnOiB7KCdBbGFuJywgMiksICgnRGlhbmUnLCA1KX0sCiAgICAnbW92aWVfNCc6IHsoJ0NhcnJpZScsIDIpLCAoJ0FsYW4nLCA1KX0gCn0KCmRlZiBzZXRsaXN0KHNpemUpOgogICAgZGVmIGdlbigpOgogICAgICAgIHJldHVybiBbc2V0KCkgZm9yIF8gaW4gcmFuZ2Uoc2l6ZSldCiAgICByZXR1cm4gZ2VuCgpkZWYgZ2V0X21heF9pbmRleChkKToKICAgIHJldHVybiBtYXgoc2NvcmUgZm9yIHJhbmtpbmcgaW4gZC52YWx1ZXMoKSBmb3IgXywgc2NvcmUgaW4gcmFua2luZykKCmRlZiByZWFycmFuZ2UoZCwgbWF4X2luZGV4PU5vbmUpOgogICAgaWYgbWF4X2luZGV4IGlzIE5vbmU6CiAgICAgICAgbWF4X2luZGV4ID0gZ2V0X21heF9pbmRleChkKQogICAgb3V0cHV0ID0gZGVmYXVsdGRpY3Qoc2V0bGlzdChtYXhfaW5kZXggKyAxKSkKICAgIGZvciBtb3ZpZSwgcmFua2luZyBpbiBkLml0ZW1zKCk6CiAgICAgICAgZm9yIHBlcnNvbiwgc2NvcmUgaW4gcmFua2luZzoKICAgICAgICAgICAgb3V0cHV0W3BlcnNvbl1bc2NvcmVdLmFkZChtb3ZpZSkKICAgIHJldHVybiBvdXRwdXQKCnByaW50KHJlYXJyYW5nZShkKSk=
defaultdict(<function setlist.<locals>.gen at 0x2b71cc4ecd08>, {'Bob': [set(), set(), set(), {'movie_2'}, set(), {'movie_1'}], 'Alan': [set(), {'movie_1'}, {'movie_3'}, set(), set(), {'movie_4'}], 'Diane': [set(), {'movie_1'}, set(), {'movie_2'}, set(), {'movie_3'}], 'Carrie': [set(), set(), {'movie_4'}, {'movie_2'}, set(), {'movie_1'}]})