How do I sort a list of strings by key=len first then by key=str?
I\'ve tried the following but it\'s not giving me the desired sort:
The answer from root is correct, but you don't really need a lambda:
>>> def key_function(x):
return len(x), str(x)
>>> sorted(['foo','bar','foobar','barbar'], key=key_function)
['bar', 'foo', 'barbar', 'foobar']
In addtion, there is a alternate approach takes advantage of sort stability which lets you sort in multiple passes (with the secondary key first):
>>> ls = ['foo','bar','foobar','barbar']
>>> ls.sort(key=str) # secondary key
>>> ls.sort(key=len) # primary key
See the Sorting HOWTO for a good tutorial on Python sorting techniques.