Как отсортировать список по значениям другого списка?
Допустим дан список [4, 3, 7, 'dfg'] нужно отсортировать этот список в порядке другого списка [1, 2, 3, 4], а если значения не совпадают поместить их в конец. То есть должно получится [3, 4, 7, 'dfg']
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
Вообще задачка прикольная, поэтому вот вам однострочник (не самый эффективный, но рабочий). Я просто задал ключ сортировки согласно описанию задачи:
l1 = [4, 3, 7, 'dfg']
l2 = [1, 2, 3, 4]
print(sorted(l1, key=lambda x: l2.index(x) if x in l2 else len(l2)))
Вывод:
[3, 4, 7, 'dfg']
Хотя учебные задачи вам бы надо решать самому, чтобы чему-то научиться, они для этого и даются.
Автор решения: Stanislav Volodarskiy
→ Ссылка
Идеи те же что и в ответе CrazyElf. Промежуточный словарь обеспечивает производительность при длинных списках:
l1 = [4, 3, 7, 'dfg']
l2 = [1, 2, 3, 4]
# отображает значения на индексы
keys = {v: i for i, v in enumerate(l2)}
# индекс для значений вне списка
last_key = len(l2)
# сортирует по индексам, ненайденные значения скапливаются в конце
print(sorted(l1, key=lambda v: keys.get(v, last_key)))
[3, 4, 7, 'dfg']