Противоречивые оценки отзывов

тема: Пропуски, дубликаты, выбросы · уровень: средний

Условие

В файле data.csv хранится выгрузка отзывов о мобильном приложении. Один и тот же отзыв может встречаться в выгрузке несколько раз, например после повторной синхронизации данных.

Строка считается относящейся к запросу, если значение в её столбце app_version совпадает с версией из stdin. Ключом отзыва является review_id.

Для каждого ключа рассматриваются все непустые значения rating в строках выбранной версии. Ключ называется противоречивым, если среди его непустых оценок встречаются хотя бы два различных значения. Требуется вывести число противоречивых ключей review_id. Пустые оценки игнорируются. Если у ключа нет непустых оценок или есть только одно различное непустое значение, он не является противоречивым. При равенстве оценок в нескольких строках противоречия не возникает.

Формат ввода

В файле data.csv в кодировке UTF-8 находится таблица с разделителем-запятой и заголовком. В ней имеются столбцы review_id, user_id, app_version, rating, review_text.

В stdin подаётся одна строка с версией приложения app_version. Необходимо учитывать только строки файла, у которых версия совпадает с этой строкой полностью.

Формат вывода

Выведите одно целое число — количество противоречивых ключей review_id среди строк выбранной версии.

Ограничения

В файле содержится от 1 до 2000 строк с данными, не считая заголовка.

Длина review_id составляет от 1 до 20 символов, длина user_id — от 1 до 20 символов, длина app_version — от 1 до 12 символов, длина review_text — от 0 до 80 символов.

Поле rating либо пустое, либо содержит целое число от 1 до 5. Версия из stdin имеет длину от 1 до 12 символов. В файле могут отсутствовать строки выбранной версии.

Решить задачу с автопроверкой на Python →

Куда дальше