Я новичок в python, и мне трудно завершить этот код. Имея data_list и указанный код, как я могу создать код, который создает вложенный список по каждому предмету, сколько людей посещает, средний балл по этому предмету? Результат должен выглядеть следующим образом:
[["Physics", 3, 6.0], ["PC", 4, 8.25], ....]
Это то, что я сделал с некоторой помощью
data_list =
["John", "Physics", 5], ["John", "PC", 7], ["John", "Math", 8],
["Mary", "Physics", 6], ["Mary", "PC", 10], ["Mary", "Algebra", 7],
["Helen", "Physics", 7], ["Helen","PC", 6], ["Helen", "Algebra", 8],
["Helen", "Analysis", 10], ["Bill", "PC", 10], ["Bill", "Analysis", 6],
["Bill", "Math", 8], ["Bill", "Biology", 6], ["Michael", "Analysis", 10]
]
def groupby(data, index, category):
"""Sort list of records by index and category
"""
output = []
indices = []
for record in data:
if record[index] not in indices:
indices.append(record[index])
output.append([record[index]])
output[-1].append(record[category])
else:
output[indices.index(record[index])].append(record[category])
return output
# index 0 -> person
# category 1 -> subject
subject_list = groupby(data_list, 0, 1)
# index 0 -> person
# category 2 -> grade
grade_list = groupby(data_list, 0, 2)
# grad_list
[['John', 5, 7, 8],
['Mary', 6, 10, 7],
['Helen', 7, 6, 8, 10],
['Bill', 10, 6, 8, 6],
['Michael', 10]]
Затем вы можете получить количество пройденных предметов на человека или среднюю оценку, например это:
import statistics
subjects_taken = [len(x) - 1 for x in subject_list]
average_grade = [statistics.mean(x[1:]) for x in grade_list]
Собирая все вместе, вы получаете:
persons = [x[0] for x in subject_list]
final_list = list(zip(persons, subjects_taken, average_grade))
# final_list
[('John', 3, 6.666666666666667),
('Mary', 3, 7.666666666666667),
('Helen', 4, 7.75),
('Bill', 4, 7.5),
('Michael', 1, 10)]