Alphabetical sorts

Ron Adam rrr at
Tue Oct 17 18:21:11 CEST 2006

Neil Cerutti wrote:
> On 2006-10-17, Ron Adam <rrr at> wrote:
>> Neil Cerutti wrote:
>>> On 2006-10-16, Ron Adam <rrr at> wrote:
>>>> I have several applications where I want to sort lists in
>>>> alphabetical order. Most examples of sorting usually sort on
>>>> the ord() order of the character set as an approximation.
>>>> But that is not always what you want.
>>> Check out strxfrm in the locale module.
>> It looks to me this would be a good candidate for a
>> configurable class. Something preferably in the string module
>> where it could be found easier.
>> Is there anyway to change the behavior of strxfrm or strcoll?
>> For example have caps before lowercase, instead of after?
> You can probably get away with writing a strxfrm function that
> spits out numbers that fit your definition of sorting.

Since that function is 'C' coded in the builtin _locale, it can't be modified by 
python code.

Looking around some more I found the documentation for the corresponding C 
functions and data structures. It looks like python may just wrap these.

Here's one example of how to rewrite the Unicode collate in python.

I haven't tried changing it's behavior, but I did notice it treats words with 
hyphen in them differently than strxfrm.

Here's one way to change caps order.

a = ["Neil", "Cerutti", "neil", "cerutti"]

locale.setlocale(locale.LC_ALL, '')
tmp = [x.swapcase() for x in a]
tmp = [x.swapcase() for x in tmp]
print tmp

['Cerutti', 'cerutti', 'Neil', 'neil']


More information about the Python-list mailing list