#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]}))