Combined natural and unnatural list sorting
Delaney, Timothy C (Timothy)
tdelaney at avaya.com
Tue Jun 15 17:51:42 EDT 2004
Derek Basch wrote:
> Hello All,
>
> I need to sort a list using an unnatural sequence.
>
> I have a list like so:
>
> foo = ["White/M", "White/L", "White/XL", "White/S", "Black/S",
> "Black/M"]
>
> print foo.sort()
>
> ['White/L', 'White/M', 'White/S', 'White/XL', 'Black/M', 'Black/S']
>
>
> The order that I actually need is:
>
> ["White/S","White/M", "White/L", "White/XL", "Black/S", "Black/M"]
>
>
> So, in other words, I need the colors sorted alphabetically and the
> the sizes sorted logically.
>
> I looked for a while at using comparison functions with sort but I
> don't think that will work. Anyone been down this road? Suggestions?
Of course a comparison function will work - you just have to write it
correctly.
I'll using DSU (decorate-sort-undecorate) for this example. Every
comparison function can be converted to DSU and vice versa.
In the comparison function, you should do the following:
1. Split the string into two parts (i.e. split on '/').
2. Do a string compare on the first part (colour).
3. If the first part compares equal, look up an equivalent value for
each size and compare those. I would suggest building a dictionary
mapping the (string) size to an integer e.g.
SIZE_MAP = {
'S': 1,
'M': 2,
'L': 3,
'XL': 4,
}
Tim Delaney
More information about the Python-list
mailing list