'''
Created on Apr 4, 2018

@author: ola
'''
import operator

data = {"ola":["compsci101", "neuro101", "bio101"],
        "rcd":["compsci308", "psych101", "neuro101"],
        "ksm":["compsci101", "econ101","bio101"],
        "nsf":["bio101","econ101","compsci101"]}
revd = {'compsci101': ['ola', 'ksm', 'nsf'], 
        'neuro101': ['ola', 'rcd'], 
        'bio101': ['ola', 'ksm', 'nsf'], 
        'compsci308': ['rcd'], 
        'psych101': ['rcd'], 
        'econ101': ['ksm', 'nsf']}

def invert(d):
    newd = {}
    for key in d.keys():
        classes = d[key]
        for one in classes:
            if one not in newd:
                newd[one] = []
            newd[one].append(key)
    
    return newd

def sort_organize(d):
    tups = sorted([(key,d[key],len(d[key])) for key in d.keys()])
    temp = sorted(tups,key=operator.itemgetter(2), reverse=True)
    bysize = [(t[0],t[1]) for t in temp]
    return bysize
    
    
if __name__ == '__main__':
    print(data)
    nd = invert(data)
    print(nd)
   
    x = sort_organize(nd)
    print(x)