pythonic way to sort

Jay Parlar jparlar at cogeco.ca
Thu May 4 00:52:44 EDT 2006


On May 4, 2006, at 12:12 AM, micklee74 at hotmail.com wrote:

> hi
> I have a file with columns delimited by '~' like this:
>
> 1SOME STRING      ~ABC~12311232432D~20060401~00000000
> 2SOME STRING      ~DEF~13534534543C~20060401~00000000
> 3SOME STRING      ~ACD~14353453554G~20060401~00000000
>
> .....
>
> What is the pythonic way to sort this type of structured text file?
> Say i want to sort by 2nd column , ie ABC, ACD,DEF ? so that it becomes
>
> 1SOME STRING      ~ABC~12311232432D~20060401~00000000
> 3SOME STRING      ~ACD~14353453554G~20060401~00000000
> 2SOME STRING      ~DEF~13534534543C~20060401~00000000
> ?
> I know for a start, that i have to split on '~', then append all the
> second columns into a list, then sort the list using sort(), but i am
> stuck with how to get the rest of the corresponding columns after the
> sort....
>
> thanks...
>

A couple ways. Assume that you have the lines in a list called 'lines', 
as follows:

lines = [
    "1SOME STRING      ~ABC~12311232432D~20060401~00000000",
    "3SOME STRING      ~ACD~14353453554G~20060401~00000000",
    "2SOME STRING      ~DEF~13534534543C~20060401~00000000"]


The more traditional way would be to define your own comparison 
function:

def my_cmp(x,y):
     return cmp( x.split("~")[1], y.split("~")[1])

lines.sort(cmp=my_cmp)


The newer, faster way, would be to define your own key function:

def my_key(x):
     return x.split("~")[1]

lines.sort(key=my_key)


The key function is faster because you only have to do the 
split("~")[1]  once for each line, whereas it will be done many times 
for each line if you use a comparison function.

Jay P.




More information about the Python-list mailing list