Take the 2-minute tour ×

While answering another question, I ended up creating a sortkey function which modified a dictionary in order to save state which would then be used for subsequent items in the sort.

While my answer seemed to work, my question is this: Is it actually defined in the python documentation that the sort-key would only be called once per object? Is this is an implementation detail of Cpython? Or is the sort-key actually called more than once and I got the correct answer only out of luck?

The documentation of sorted states:

key specifies a function of one argument that is used to extract a comparison key from each list element: key=str.lower. The default value is None (compare the elements directly)

Which I don't think implies that key will only be called once per element ... but it could be stated elsewhere.

Obviously I ask as this has consequences on any sort-keys which have a side effect.

share|improve this question
add comment

1 Answer

up vote 8 down vote accepted

From the section of the docs you link:

In general, the key and reverse conversion processes are much faster than specifying an equivalent cmp function. This is because cmp is called multiple times for each list element while key and reverse touch each element only once.

That would seem to be a "yes" ...

share|improve this answer
Good catch! Who would have thought that information would be under cmp instead of key? Thanks. I'll accept when I can. –  mgilson Nov 15 '12 at 4:34
@mgilson: People who read the whole section might not have to ask... –  martineau Nov 15 '12 at 10:51
add comment

Your Answer


