for p in data: # Pick which class we're using if p['type'] == 'M': e = Manager() else: e = Employee() # Basic Data e.id = p['id'] e.givenname = p['gn'] e.surname = p['sn'] e.title = p['t'] # If the person has a manager, record it if 'm' in p: e.manager = employees[p['m']] employees[p['m']].reports.append(e) # Add to Employee Directory employees[e.id] = e # Recursive Function to Print the Org Chart (tree) # person - Starting Person, required # limit - How many levels deep to display, default is unlimited # level - What level we're currently displaying (for formatting purposes), default is 0 def printOrgChart(person, limit=-1, level=0): print ("\t" * level) + person.lastfirst() if type(person) == Manager and (limit < 0 or limit > level): for report in person.reports: