fork download
  1. from collections import defaultdict
  2.  
  3. d = {
  4. 'movie_1': {
  5. ('Bob', 5), ('Carrie', 5), ('Alan', 1), ('Diane', 1)
  6. },
  7. 'movie_2': {
  8. ('Carrie', 3), ('Diane', 3), ('Bob', 3)
  9. },
  10. 'movie_3': {('Alan', 2), ('Diane', 5)},
  11. 'movie_4': {('Carrie', 2), ('Alan', 5)}
  12. }
  13.  
  14. def setlist(size):
  15. def gen():
  16. return [set() for _ in range(size)]
  17. return gen
  18.  
  19. def get_max_index(d):
  20. return max(score for ranking in d.values() for _, score in ranking)
  21.  
  22. def rearrange(d, max_index=None):
  23. if max_index is None:
  24. max_index = get_max_index(d)
  25. output = defaultdict(setlist(max_index + 1))
  26. for movie, ranking in d.items():
  27. for person, score in ranking:
  28. output[person][score].add(movie)
  29. return output
  30.  
  31. print(rearrange(d))
Success #stdin #stdout 0.02s 27712KB
stdin
Standard input is empty
stdout
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'}]})