question 160 Collections & Itertools · hard
How many people work under each manager?
An org chart is stored as a flat list: each person names their manager (None for someone at the top). For a headcount report, write team_sizes(employees): return a plain dictionary giving, for every person, how many people work under them directly or indirectly. The list is in no particular order: a person can appear before their manager.
Function
team_sizes(employees)employeesa list of dictionaries with
name and manager (a name, or None)Returnsa plain
dict of name → number of people below them; 0 for someone with no reportsExampleAda manages Ben and Cy, Ben manages Dee, Dee manages Eve → Ada 4, Ben 2, Cy 0, Dee 1, Eve 0
Examples
callteam_sizes([{'name': 'Ada', 'manager': None}, {'name': 'Ben', 'manager': 'Ada'}, {'name': 'Cy', 'manager': 'Ada'}, {'name': 'Dee', 'manager': 'Ben'}, {'name': 'Eve', 'manager': 'Dee'}])returns{'Ada': 4, 'Ben': 2, 'Cy': 0, 'Dee': 1, 'Eve': 0}
callteam_sizes([{'name': 'Kai', 'manager': None}, {'name': 'Lu', 'manager': 'Kai'}])returns{'Kai': 1, 'Lu': 0}
callteam_sizes([])returns{}