Сортировка, где в качестве ключа список

Мне из БД приходит список записей, у каждой записи свой уникальный id, также есть список id_priority, в котором мы задаем произвольную сортировку этих записей (например, если в списке следующие данные [2,4,1,3], то сначала у нас будет "Запись с id 2", "Запись с id 4", "Запись с id 1", "Запись с id 3"). Если в списке условно указано 5 ид_шников, а записей пришло 10, то оставшиеся сортируем в алфавитном порядке


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

Автор решения: Namerek
records = (
    (1, 'item_1'),
    (2, 'item_2'),
    (3, 'item_3'),
    (4, 'item_4'),
    (5, 'item_5'),
    (6, 'item_6'),
    (7, 'b_item_6'),
    (8, 'a_item_6'),
)

priority = (
    (1, 2),
    (2, 4),
    (3, 1),
    (4, 5),
    (5, 3),
    (6, 6),
)

keys = dict(priority)

indexed = sorted(
    filter(
        lambda x: x[0] in keys, records
    ),
    key=lambda x: keys.get(x[0])
)
others = sorted(
    filter(
        lambda x: x[0] not in keys, records
    ),
    key=lambda x: x[1]
)

sorted_list = [*indexed, *others]

print(*sorted_list, sep='\n')

# (3, 'item_3')
# (1, 'item_1')
# (5, 'item_5')
# (2, 'item_2')
# (4, 'item_4')
# (6, 'item_6')
# (8, 'a_item_6')
# (7, 'b_item_6')
→ Ссылка