Python Python Collections (2016, retired 2019) Dictionaries Teacher Stats

Shahid Mohamed Islam
Shahid Mohamed Islam
4,371 Points

Is there a better way? - Python

My code passes but just want to know if there's a better way of doing the task below. My code seems convoluted and doesn't consider several 'teachers' doing the same number of 'courses'.

Task: Create a function named most_courses that takes our dictionary. It should return the name of the teacher with the most courses. You might need to hold onto some sort of max count variable.

teachers.py
# The dictionary will look something like:
# {'Andrew Chalkley': ['jQuery Basics', 'Node.js Basics'],
#  'Kenneth Love': ['Python Basics', 'Python Collections']}

def most_courses(some_dict):
    new_dictionary = {}
    for key in some_dict.keys():                        #Iterating through each teacher in dictionary
        number_of_courses = len(some_dict[key])         #Number of courses of teacher
        new_dictionary.update({number_of_courses:key})  #Creating a new dictionary with number_of_courses as key and teacher as value.
                                                        #...I do this so I can search for the max length and find the associated teacher name
    most_course_amount = max(new_dictionary.keys())     #most_course_amount = maximum number of courses.
    busiest_teacher = new_dictionary[most_course_amount]#busiest_teacher = the teachers name associated with 
                                                        # ...most_course_amount
    return busiest_teacher

1 Answer

Steven Parker
Steven Parker
203,717 Points

This is about the most efficient (or at least most concise) solution I've seen:

def most_courses(dict):
    return max(dict, key=lambda k: len(dict[k]))

In the case of a "tie", it would simply return the first one just like your version does. Given the instructions, I'm not sure you could do anything else in that situation.