'''
Problem 1 on Test 2 Fall 2012 Practice Test

Created on Nov 11, 2014

@author: Susan
'''

'''
Here is the output when I run this code:
dictionary of name To labs:
{'Ethel': ['lab1', 'lab2', 'lab3', 'lab4', 'lab5', 'lab6'], 'Alex': ['lab3'], 'Mary': ['lab4', 'lab3', 'lab1', 'lab6'], 'Fred': ['lab1', 'lab2', 'lab4', 'lab6']}
Unique labs are set(['lab3', 'lab2', 'lab1', 'lab6', 'lab5', 'lab4'])
dictionary of lab to names in lab:
{'lab3': ['Ethel', 'Alex', 'Mary'], 'lab2': ['Ethel', 'Fred'], 'lab1': ['Ethel', 'Mary', 'Fred'], 'lab6': ['Ethel', 'Mary', 'Fred'], 'lab5': ['Ethel'], 'lab4': ['Ethel', 'Mary', 'Fred']}

'''
    

def labify(nameToLabs):
    # compute a list of all lab names
    allLabs = []
    for key in nameToLabs:
        allLabs += nameToLabs[key]
    # compute a list of unique lab names
    uniqueLabs = set(allLabs)
    print "Unique labs are", uniqueLabs
    
    # Now build new inverted dictionary of labs to names attended
    labToNames = {}
    for lab in uniqueLabs:    # example: lab1, lab2, lab3, etc.
        labToNames[lab] = []  # create empty list of names for each lab
    for key in nameToLabs:    #  For each name, such as "Fred"
        for lab in nameToLabs[key]:   # for each lab "Fred" attended
            labToNames[lab].append(key)    # add the name "Fred" to that lab list
    return labToNames
        

    
    
nameToLabs = {
        "Fred": ["lab1", "lab2", "lab4", "lab6"],
        "Ethel": ["lab1", "lab2", "lab3", "lab4", "lab5", "lab6"],
        "Alex": ["lab3"],
        "Mary": ["lab4", "lab3", "lab1", "lab6" ]
        }



print "dictionary of name To labs:"
print nameToLabs
newDict =  labify(nameToLabs)
print "inverted dictionary of lab to names in lab:"
print newDict
