DSU: Decorate Sort Undecorate
In Perl it is called Schwartzian transform
examples/lists/sort_dsu.py
animals = ['chicken', 'cow', 'snail', 'elephant'] print(sorted(animals)) print(sorted(animals, key=len)) decorated = [(len(w), w) for w in animals] print(decorated) decorated.sort() result = [ d[1] for d in decorated] print(result) # at once print( [ d[1] for d in sorted( [(len(w), w) for w in animals] ) ] )
['chicken', 'cow', 'elephant', 'snail'] ['cow', 'snail', 'chicken', 'elephant'] [(7, 'chicken'), (3, 'cow'), (5, 'snail'), (8, 'elephant')] ['cow', 'snail', 'chicken', 'elephant'] ['cow', 'snail', 'chicken', 'elephant']