Поиск средней оценки словарей

#python #python-3.x #dictionary

#python #python-3.x #словарь

Вопрос:

Я пытаюсь написать функцию с именем averageGrades, которая принимает словарь с ключами, представляющими учащихся, и значениями, представляющими их оценки. Функция должна возвращать новый словарь с ключами, представляющими учащихся, и значениями, представляющими среднее значение их оценок. Среднее значение должно быть int и должно быть усечено

Мне удалось написать немного кода, который дает мне одно среднее значение, но оно не повторяется по списку…

 def averageGrades(diction):
    avgDict = {}
    for k, v in diction.items():
        # v is the list of grades for student k
         avgDict[k] = sum(v)/ float(len(v))
         return avgDict
  

Средние оценки ({«Shana»: [100, 90, 80], » Джоди»: [100, 70, 80, 90, 100], » Майк»:
[100, 100, 20]})

Когда я делаю это ^ я получаю {‘Shana’: 90,0}, когда я хочу {‘Jody’: 88, ‘Mike’: 73, ‘Shana’: 90}

Комментарии:

1. Не return avgDict внутри цикла; он будет включать только то, что он обработал до этого момента (т. Е. Первый элемент).

2. Не могли бы вы распечатать diction ключи и значения?

3. @karl Вы не должны изменять содержание какого-либо вопроса. Если вы действительно хотите удалить, тогда поднимите флаг / удалите вопрос.

Ответ №1:

Ваша позиция оператора return неуместна. В вашем случае оператор return находится внутри цикла for , поэтому оператор return возвращает dict с первым элементом, а не со всем dict . Попробуйте следующий код

 def averageGrades(diction):
    avgDict = {}
    for k, v in diction.items():
        # v is the list of grades for student k
         avgDict[k] = sum(v)/ float(len(v))
    return avgDict
  

Ответ №2:

Это должно сделать:

 def averageGrades(diction):
    avgDict = {}
    for k, v in diction.items():
        # v is the list of grades for student k
         avgDict[k] = sum(v)/ float(len(v))
    return avgDict
    ^^^^^
  

Отступы важны.

Ваша функция остановилась в первом цикле, потому return что оператор был написан до завершения for оператора

Ответ №3:

Вы должны вернуть свой averageDict вне вашего цикла for. Если он находится внутри цикла for, оператор return вернется после первой итерации, чего вы не хотите. Попробуйте сделать следующее.

 def averageGrades(diction):
    avgDict = {}
    for k, v in diction.items():
        # v is the list of grades for student k
         avgDict[k] = sum(v)/ float(len(v))
    return avgDict

print(averageGrades({"Shana": [100, 90, 80], "Jody": [100, 70, 80, 90, 100], "Mike": [100, 100, 20]}))