Ответ 1
a.sort(key=lambda x: b.index(x[0]))
Это сортирует a
на месте, используя индекс в b
первого элемента каждого набора из a
в качестве значений, которые он сортирует.
Другой, возможно, более чистый способ записи:
a.sort(key=lambda (x,y): b.index(x))
Если у вас было большое количество элементов, было бы более эффективно делать что-то по-другому, потому что .index()
может быть дорогостоящей операцией в длинном списке, и вам действительно не нужно делать полную сортировку с тех пор вы уже знаете порядок:
mapping = dict(a)
a[:] = [(x,mapping[x]) for x in b]
Обратите внимание, что это будет работать только для списка из 2-х кортежей. Если вы хотите, чтобы он работал для кортежей произвольной длины, вам нужно немного его изменить:
mapping = dict((x[0], x[1:]) for x in a)
a[:] = [(x,) + mapping[x] for x in b]