"andrew cooke" <and...@acooke.org> writes: > Hrvoje Niksic wrote: >> Kottiyath <n.kottiy...@gmail.com> writes: >> >>> Hi, >>> I have 2 lists >>> a = [(4, 1), (7, 3), (3, 2), (2, 4)] >>> b = [2, 4, 1, 3] >>> >>> Now, I want to order _a_ (a[1]) based on _b_. >>> i.e. the second element in tuple should be the same as b. >>> i.e. Output would be [(3, 2), (2, 4), (4, 1), (7, 3)] >> [...] >>> whether I can do it in a line or 2, >> >> a.sort(key=lambda (x, y): b[y - 1], reverse=True) > > that's hilarious! i have no idea how it works [...] > did you just play around until you got the right answer? how many > different tries did you need?
Glad to have made someone laugh, but it in fact wasn't meant to. :-) It was a combination of misunderstanding the question *and* trying out the answer. I understood that the second element of each tuple should be sorted according to the corresponding element in b. This part is partly correct, but I took corresponding to mean that it should be sorted by the value of b[x], x being the second element of each tuple. Since those elements appear to be 1-based, I added -1. This produced a list in exactly the reverse order, so I added reverse=True. Your solution are probably the "two lines" the OP was looking for. -- http://mail.python.org/mailman/listinfo/python-list