

Sorting with order arrays - fayyazkl
http://forum.codecall.net/topic/64833-new-sorting-with-order-arrays/#axzz2EGpwkjps

======
dalke
This is done with a straight decorate-sort-undecorate
(<http://en.wikipedia.org/wiki/Schwartzian_transform>). In the simplest case,
and in Python:

    
    
        "".join(sorted("ccbaba", key=lambda c: "cba".index(c)))
    

gives "ccbbaa" as the result.

The performance is a function of the query string length and the order string
length, because str.index is a linear search. The obvious speedup, should the
order string be extremely long, is to turn the order string into a lookup
table:

    
    
        order = {c: i for i, c in enumerate("bca")}
        "".join(sorted("ccbaba", key=lambda c: order[c]))

