
'''
sorted(iterable, key=None, reverse=False)

Не пусть с методом списка .sort() - этот метод меняет сам список.

Для сортировки словаря по значения используется следующий подход:


for name in sorted(heroes, key=heroes.get):
    print(name, heroes[name])

    
Это чистая функция возвращает новый список.
'''

def test_1():
    my_list = ['123', 12, '5', 3, 53]
    print(sorted(my_list))


def test_2():
    my_list = [1, 123, 12, 15, 10, 18]
    print(sorted(my_list, key=lambda x: (-len(str(x)), x)))


def test_3():
    my_list = [
        (10, 10, 10),
        (8, 10, 12),
        (6, 12, 9),
        (10, 12, 14)
    ]

    s = sorted(my_list, key=lambda x: (-x[0], -x[2]), reverse=True)
    print(s[0])


def print_results(lst):
    '''Информация выводится по убыванию оценок, а в случае их равенства
    предметы должны выводиться в обратном алфавитном порядке без учета регистра.'''    
    sorted_lst = sorted(lst, key=lambda x: (x[1], x[0].lower()), reverse=True)
    for i in sorted_lst:
        print(i[0], i[1])


def get_sort_lines(lst):
    'Сортировка по длине отрезка, затем по координатом первой и второй точки'
    return sorted(lst, key=lambda x: (abs(x[1] - x[0]), x[0], x[1]))


def print_goods(lst):
    'Сортировка словаря по двум критериям'
    for item in sorted(lst, key=lambda x: (x['color'].lower(), -x['model'])):
        # print(f'Производитель: {item['make']}, модель: {item['model']}, цвет: {item['color']}')
        print('Производитель: ', item['make'], ', модель: ', item['model'], ', цвет: ', item['color'], sep='')


def print_goods_new(lst):
    new_lst = [position.split(': ') for position in lst]
    sorted_lst = sorted(new_lst, key=lambda x: (-float(x[1]), x[0].lower()))
    for item in sorted_lst:
        print(f'{float(item[1]):.2f} - {item[0]}')


def print_best_and_worst_laureate(dct):
    new_dict = {}
    for key, value in dct.items():
        if value not in new_dict.keys():
            new_dict[value] = 1
        else:
            new_dict[value] += 1

    sorted_list = sorted(new_dict.items(), key=lambda x: -x[1])        
    
    print(sorted_list[0][0], ', ',sorted_list[0][1], sep='')
    print(sorted_list[-1][0], ', ',sorted_list[-1][1], sep='')


def print_order_rating(lst):
    new_dict = {}
    for driver in lst:
        if driver[0] not in new_dict.keys():
            new_dict[driver[0]] = [driver[1]]
        else:
            new_dict[driver[0]].append(driver[1])

    for key, value in new_dict.items():
        new_dict[key] = sum(value)/len(value)

    new_list = [[key, value] for key, value in new_dict.items()]
    new_list = sorted(new_list, key=lambda x: (-x[1], x[0].lower()))
    
    for item in new_list:
        print(f'{item[0]} {item[1]}')


def print_statistic(lst):
    new_dict = {}
    for autor in lst:
        if autor[0] not in new_dict.keys():
            new_dict[autor[0]] = set()
            new_dict[autor[0]].add(autor[1])
        else:
            new_dict[autor[0]].add(autor[1])

    for key, value in new_dict.items():
        new_dict[key] = len(value)

    new_list = sorted(new_dict.items(), key=lambda x: (-x[1], x[0].lower()))

    for item in new_list:
        print(f'Количество уникальных комментаторов у {item[0]} - {item[1]}')

    # print(new_list)

    # print(new_dict)

    # new_list = []
    # for key, value in new_dict.items():
    #     new_list



def set_test():
    my_set = set()    

    for i in range(5):
        my_set.add(i)

    for i in range(5):
        my_set.add(i)
    
    print(my_set)



def main():
    # test_1()
    # test_2()
    # test_3()

    # marks = [('English', 88), ('Science', 90), ('Maths', 97), ('Physics', 93), ('History', 82)]
    # marks = [('English', 88), ('Science', 100), ('Maths', 81), ('Physics', 100), ('History', 82), ('Music', 100)]
    # marks = [('english', 100), ('Science', 100), ('maths', 100),
    #         ('Physics', 100), ('history', 100), ('Music', 100)]
    # print_results(marks)

    # lines = [(5, 6), (5, 4), (1, 0), (0, -1), (1, 2), (2, 1)]
    # print(get_sort_lines(lines))

    # get_sort_lines(lines)

    """
    models = [{'make': 'Nokia', 'model': 2, 'color': 'Black'},
          {'make': 'Mi Max', 'model': 3, 'color': 'red'},
          {'make': 'Samsung', 'model': 5, 'color': 'Yellow'},
          {'make': 'Apple', 'model': 10, 'color': 'RED'},
          {'make': 'Oppo', 'model': 9, 'color': 'Red'},
          {'make': 'Huawei', 'model': 4, 'color': 'BLACK'},
          {'make': 'Honor', 'model': 3, 'color': 'black'},
          {'make': 'Nothing Phone', 'model': 7, 'color': 'Yellow'}]
    
    print_goods(models)
    """

    """
    laureates = {'За лучший фильм': 'Все везде и сразу',
             'За лучшую музыку к фильму': 'На Западном фронте без перемен',
             'За лучший звук': 'Топ Ган: Мэверик',
             'За лучшие визуальные эффекты': 'Аватар: Путь воды',
             'За лучший дизайн костюмов': 'Топ Ган: Мэверик',
             'За лучшую операторскую работу': 'На Западном фронте без перемен',
             'За лучший монтаж': 'Все везде и сразу',
             'За лучший оригинальный сценарий': 'Все везде и сразу',
             'За лучший фильм на иностранном языке': 'Все везде и сразу', }

    print_best_and_worst_laureate(laureates)
    """

    """
    drivers = [
    ('Зина', 5),
    ('Зина', 3),
    ('Гермиона', 4),
    ('Гермиона', 4),
    ('александр', 4),
    ]
    
    print_order_rating(drivers)
    """

    data = [
    ('7', 'opushka'),
    ('1', 'opushka'),
    ('2', 'opushka'),
    ('3', 'opushka'),
    ('2', 'opushka'),
    ('1', 'opushka'),
    ('2', 'opushka'),
    ('5', 'opushka'),
    ('6', 'opushka'),
    ('6', 'opushka'),
    ]

    
    # print_statistic(data)

    # print(set_test.__code__)
    # print(set_test.__code__.co_varnames)
    # print(set_test.__code__.co_argcount)





if __name__ == '__main__':
    main()