import json import os import csv from collections import Counter def load_vacancies(filepath: str) -> list[dict]: try: with open(filepath,"r") as file: return json.load(file) except: print() return [] def filter_by_city(vacancies: list[dict], city: str) -> list[dict]: return [i for i in vacancies if i.get('city','').lower() == city.lower()] def filter_by_skills(vacancies: list[dict], required_skills: list[str]) -> list[dict]: return [i for i in vacancies if all(skill.lower() in set(k.lower() for k in i.get('skills')) for skill in required_skills ) ] def filter_by_salary(vacancies: list[dict], min_salary: int) -> list[dict]: return [v for v in vacancies if v.get('salary_to') and v.get('salary_from') and v.get('salary_to')>= min_salary and v.get('salary_form')> min_salary] def extract_unique_companies(vacancies: list[dict]) -> list[str]: return {v.get('company') for v in vacancies if v.get('company')} def extract_top_skills(vacancies: list[dict], top_n: int) -> list[tuple[str, int]]: all_skills = [] for v in vacancies: all_skills.extend(v.get('skills', [])) skill_counts = Counter(all_skills) return skill_counts.most_common(top_n) def calculate_average_salary(vacancies: list[dict]) -> float: if not vacancies: return 0.0 else: salaries = [] for v in vacancies: salary_from = v.get('salary_from') salary_to = v.get('salary_to') if salary_from is not None and salary_to is not None: salaries.append((salary_from + salary_to) / 2) elif salary_from is not None: salaries.append(salary_from) elif salary_to is not None: salaries.append(salary_to) if not salaries: return 0.0 return sum(salaries) / len(salaries) def group_by_company(vacancies: list[dict]) -> dict[str, int]: all_company = [] for v in vacancies: all_company.append(v.get('company')) company_count = Counter(all_company) return company_count def format_vacancy_short(vacancy: dict) -> str: salary_from = vacancy.get('salary_from') salary_to = vacancy.get('salary_to') if salary_from is not None and salary_to is not None: salary_str = f"от {salary_from} до {salary_to}" elif salary_from is not None: salary_str = f"от {salary_from}" elif salary_to is not None: salary_str = f"до {salary_to}" else: salary_str = "зарплата не указана" return (f"ID {vacancy.get('id')}: {vacancy.get('title')} в {vacancy.get('company')}, " f"{vacancy.get('city')} — {salary_str}") def save_filtered_results(vacancies: list[dict], filename: str) -> bool: return def main(): main_list=load_vacancies(input("Print path for json:")) if __name__ =="__main__": #вход проги main()