2017-01-03 6 views
0

Мне нужно создать функцию с именем stats, чтобы вернуть список списков, где первый элемент в каждом внутреннем списке - это имя учителя, а второй элемент - количество курсов, которые есть у преподавателя. Он должен вернуться: [[ "Том Смит", 6], [ "Эмма Ли", 3]]Функция для создания списка списков

Аргументом является словарь, который выглядит следующим образом:

teacher_dict = {'Tom Smith': ['a', 'b', 'c', 'd', 'e', 'f'], 'Emma Li': ['x', 'y', 'z']} 

Вот моя попытка:

def stats(teacher_dict): 
    big_list = [] 
    for teacher, courses in teacher_dict.items(): 
     number_of_courses = [] 
      for key in teacher_dict: 
      teacher = '' 
      num = 0 
      for item in teacher_dict[key]: 
       num += 1 
      number_of_courses.append((key,num)) 
    return big_list.append([teacher, number_of_courses]) 

Еще одна попытка:

def stats(teacher_dict): 
    big_list = [] 
    for teacher in teacher_dict.items(): 
     number_of_courses = len(teacher_dict[teacher]) 
    return big_list.append([teacher, number_of_courses]) 

Любая помощь очень ценится! Оба сценария имеют ошибки, и я все еще очень младший в Python, но очень хочу понять это. Спасибо.

+1

Пожалуйста, подробно опишите проблему (ы) с вашими попытками решить эту проблему. –

+0

Да, также придерживайтесь одной реализации, и я предлагаю попробовать написать код, который проверяет ваш метод и выводит результат, чтобы мы могли скопировать и вставить ваш код. Чем меньше работы мы должны делать, тем более полезно сообщество становится. –

ответ

2

Используйте список понимание

[[k, len(v)] for k, v in teacher_dict.items()] 
+0

Я всегда ценю однострочное, чистое, простое решение. ИМО, это легче всего понять для новичков. –

+0

Это выглядит так просто! Не могу в это поверить, спасибо Патрик. Не могли бы вы объяснить, почему вы использовали метод .items()? –

+0

@MaiiaS. 'items' предоставляет вид словаря, который вы можете в основном рассматривать как список кортежей типа' [('Tom Smith', ['a', 'b', 'c']), ...] ' где первый элемент кортежа - это ключ словаря, а второй элемент - это значение ключа. Когда вы перебираете словарь непосредственно 'for x in d', вы фактически выполняете только итерации по клавишам. –

0
teacher_dict = {'Tom Smith': ['a', 'b', 'c', 'd', 'e', 'f'], 'Emma Li': ['x', 'y', 'z']} 
stats = lambda teacher_dict: [[teacher, len(courses)] for teacher, courses in teacher_dict.items()] 
stats(teacher_dict) 

Выходы: [[ 'Эмма Ли', 3], [ 'Том Смит', 6]]

0

Ваш пример кода почти хорошо проблема заключается в том, что оператор return заканчивает работу преждевременно. Также необходимо позвонить append внутри цикла:

def stats(teacher_dict): 
    big_list = [] 
    for teacher in teacher_dict.items(): 
     number_of_courses = len(teacher_dict[teacher]) 
     big_list.append([teacher, number_of_courses]) 
    return big_list