a.sort(key=lambda x: b.index(x[0]))
Esto ordena a
en el lugar usando el índice en b
del primer elemento de cada tupla de a
como los valores que ordena en.
Otro, posiblemente, más limpio, forma de escribir sería:
a.sort(key=lambda (x,y): b.index(x))
Si tuviera un gran número de artículos, que podría ser más eficiente de hacer las cosas un poco diferente, porque .index()
puede haber una operación costosa en una larga lista, y que en realidad no tiene que hacer una clasificación completa puesto que ya conoce el orden:
mapping = dict(a)
a[:] = [(x,mapping[x]) for x in b]
Tenga en cuenta que esto sólo funcionará para una lista de 2-tuplas Si quieres que funcione para tuplas de longitud arbitraria, que había necesidad de modificarlo ligeramente:
mapping = dict((x[0], x[1:]) for x in a)
a[:] = [(x,) + mapping[x] for x in b]
posible duplicado de [lista de clasificación basada en los valores de otra lista?] (Http://stackoverflow.com/questions/6618515/sorting-list-based-on-values-from-another-list) – user1251007