Assuming that A and B have the same length, each of the first elements of the tuples in A corresponds to an element in B and there are no duplicates, you can use this:
>>> A = [[3,5],[1,3],[6,1]]
>>> B = [6,1,3]
>>> A_ind = {b: [b, a] for (b, a) in A}
>>> [A_ind[b] for b in B]
[[6, 1], [1, 3], [3, 5]]
This simply creates a dict, mapping the b part from A to the whole elements and looking up the respective elements in B in that dict. Using neither sorted not index, this has complexity of O(n).
If there can be duplicate elements, you can create a dict (or defaultdict) mapping keys to lists of elements having that key:
>>> A = [[3,5],[1,3],[6,1],[1,4]]
>>> A_ind = collections.defaultdict(list)
>>> for b, a in A:
... A_ind[b].append([b,a])
...
>>> B = [6,1,3,1]
>>> [a for b in B for a in A_ind[b]]
[[6, 1], [1, 3], [1, 4], [3, 5], [1, 3], [1, 4]]
Or turn the list into iterators to distribute the values in A to the matching keys in B:
>>> A_ind = {k: iter(v) for k, v in A_ind.items()}
>>> [next(A_ind[b]) for b in B]
[[6, 1], [1, 3], [3, 5], [1, 4]]