import json import sys if len(sys.argv) != 2: sys.exit(1) class Lesson: def __init__(self): pass def read_from_schedule_pair(self, p): self.time = p["time"].rsplit(':', 1)[0] self.name = p["name"] self.teacher = p["teacherName"] self.type = p["tag"] self.selectable = False self.link = "" self.nolink = True def get_packable_object(self): return { "name": self.name, "teacher": self.teacher, "link": self.link, "type": self.type, "selectable": self.selectable, "nolink": self.nolink } def day_to_lesson_pool(pairs): pool = [] for p in pairs: l = Lesson() l.read_from_schedule_pair(p) pool.append(l) return pool def lesson_pool_to_objs(pool): times = [] for i in (list(map(int, (i.time.split(':')))) for i in pool): if i not in times: times.append(i) times.sort(key = lambda x: x[0] * 60 + x[1]) result = {} for i in times: lesson_timestamp = f"{i[0]:02}:{i[1]:02}" required_timestamp = f"{i[0]}:{i[1]}" objs_dup = (j.get_packable_object() for j in pool if j.time == lesson_timestamp) objs = [] for i in objs_dup: if i not in objs: objs.append(i) if len(objs) == 0: continue elif len(objs) == 1: result[required_timestamp] = list(objs)[0] else: result[required_timestamp] = list(objs) return result def process_week(week): result = [] for weekday in ["Пн", "Вв", "Ср", "Чт", "Пт"]: day_pool = day_to_lesson_pool(next(filter(lambda l: l['day'] == weekday, week))['pairs']) result.append(lesson_pool_to_objs(day_pool)) result.append({}) result.append({}) return result ext_schedule = json.load(open(sys.argv[1], 'r')) int_schedule = [] int_schedule += process_week(ext_schedule["scheduleFirstWeek"]) int_schedule += process_week(ext_schedule["scheduleSecondWeek"]) print(json.dumps(int_schedule, ensure_ascii = False, indent = 4))