Вопрос по сортировке

Я не понимаю как выстроить логику сортировки в данном задании, при том что нужно чтобы работало на разных значениях ticket_types, user_tickets

Пример:

Input:

ticket_types = ('Ж', 'К', 'З')

user_tickets = ['З', 'К', 'К', 'З', 'З', 'З', 'Ж', 'К', 'Ж']

Output:

['Ж', 'Ж', 'К', 'К', 'К', 'З', 'З', 'З', 'З']

Ответы (1 шт):

Автор решения: CrazyElf

Например, так. Главное подобрать правильный ключ сортировки:

ticket_types = ('Ж', 'К', 'З')
user_tickets = ['З', 'К', 'К', 'З', 'З', 'З', 'Ж', 'К', 'Ж']
sort_dict = {v:i for i,v in enumerate(ticket_types)}
print(sorted(user_tickets, key=lambda x: sort_dict[x]))

Вывод:

['Ж', 'Ж', 'К', 'К', 'К', 'З', 'З', 'З', 'З']

Можно было бы и не делать словарь для сортировки, но если данных будет много, этот вариант будет работать очень медленно:

print(sorted(user_tickets, key=lambda x: ticket_types.index(x)))

Ещё вариант, через цикл в цикле:

print([i for i in ticket_types for j in user_tickets if i == j])
→ Ссылка