Вот способ достижения этого.
Первое, что нужно сделать, - это проанализировать, чего мы пытаемся достичь здесь, и наметить работу, которую нам нужно сделать:
- читать данные (я буду «издеваться» над этим шагом, поскольку вы уже реализовали его самостоятельно)
- сбор статистики
- запись статистики в файл
КакЧтобы сохранить вещи в чистоте, мы могли бы создать «основную» функцию, которая будет делать именно это:
def analyze_movie_data():
data = read_data()
stats = get_stats(data)
write_stats_to_csv(stats)
Далее следуют подробности реализации.Обратите внимание, что я также создал вспомогательный метод для сбора статистики построчно - опять же, чтобы мне не приходилось держать в голове много логики в одно и то же время.
from csv import DictWriter
def read_data():
lines = [
{'year': 2011, 'revenue': 1000},
{'year': 2012, 'revenue': 2000},
{'year': 2011, 'revenue': 3000},
{'year': 2012, 'revenue': 4000},
{'year': 2011, 'revenue': 5000},
]
return lines
def get_stats(lines):
def add_line(stats, line):
year = line['year']
if year not in stats:
stats[year] = {'year': year, 'freq': 0, 'total_revenue': 0}
stats[year]['freq'] += 1
stats[year]['total_revenue'] += line['revenue']
stats = {}
for line in lines:
add_line(stats, line)
return stats
def write_stats_to_csv(stats):
columns = ['year', 'freq', 'total_revenue']
with open('stats.csv', 'w', newline='') as output:
writer = DictWriter(output, columns)
writer.writeheader()
for year in stats:
writer.writerow(stats[year])
def analyze_movie_data():
data = read_data()
stats = get_stats(data)
write_stats_to_csv(stats)
analyze_movie_data()
Выход (тогда для моего ложного ввода):
year,freq,total_revenue
2011,3,9000
2012,2,6000