Multidimensional sort

James Stroud jstroud at mbi.ucla.edu
Wed Oct 10 22:53:42 CEST 2007


termiflyer wrote:
> How do I sort this:
> 
>>>> a
> [['3', ['1', '0']], ['4', ['3', '0'], ['2', '0']]]
> 
> where the list can be arbitrarily large by the 3rd dimension (i
> think).  E.g.:
> 
>>>> a
> [['3', ['1', '0']], ['4', ['2', '0'], ['3', '0']]]
> 
> 
> Thanks
> 

Your difficulties come from an ill-defined third dimension. You should 
reorganize to produce this heretofore potential third dimension:

    a = [(i[0], i[1:]) for i in a]

Then sort the reorganized list now that it has a structure amenable to 
sorting:

    for i in a:
      i[1].sort()

Then, if you are pressed, transform it back:

    a = [[i[0]] + i[1] for i in a]

E.g.:

   py> a = [['3', ['1', '0']], ['4', ['3', '0'], ['2', '0']]]
   py> a = [(i[0], i[1:]) for i in a]
   py> a
   [('3', [['1', '0']]), ('4', [['3', '0'], ['2', '0']])]
   py>    for i in a:
   ...      i[1].sort()
   ...
   py> a
   [('3', [['1', '0']]), ('4', [['2', '0'], ['3', '0']])]
   py> a = [[i[0]] + i[1] for i in a]
   py> a
   [['3', ['1', '0']], ['4', ['2', '0'], ['3', '0']]]

James



-- 
James Stroud
UCLA-DOE Institute for Genomics and Proteomics
Box 951570
Los Angeles, CA  90095

http://www.jamesstroud.com



More information about the Python-list mailing list