Sorting a multidimensional array by multiple keys
Steven Bethard
steven.bethard at gmail.com
Sat Mar 31 11:40:02 EDT 2007
Rehceb Rotkiv wrote:
>> If you want a good answer you have to give me/us more details, and an
>> example too.
>
> OK, here is some example data:
>
> reaction is BUT by the
> sodium , BUT it is
> sea , BUT it is
> this manner BUT the dissolved
> pattern , BUT it is
> rapid , BUT it is
>
> As each line consists of 5 words, I would break up the data into an array
> of five-field-arrays (Would you use lists or tuples or a combination in
> Python?). The word "BUT" would be in the middle, with two fields/words
> left and two fields/words right of it. I then want to sort this list by
>
> - field 3
> - field 4
> - field 1
> - field 0
You're probably looking for the key= argument to list.sort(). If your
function simply returns the fields in the order above, I believe you get
the right thing::
>>> s = '''\
... reaction is BUT by the
... sodium , BUT it is
... sea , BUT it is
... this manner BUT the dissolved
... pattern , BUT it is
... rapid , BUT it is
... '''
>>> word_lists = [line.split() for line in s.splitlines()]
>>> def key(word_list):
... return word_list[3], word_list[4], word_list[1], word_list[0]
...
>>> word_lists.sort(key=key)
>>> word_lists
[['reaction', 'is', 'BUT', 'by', 'the'],
['pattern', ',', 'BUT', 'it', 'is'],
['rapid', ',', 'BUT', 'it', 'is'],
['sea', ',', 'BUT', 'it', 'is'],
['sodium', ',', 'BUT', 'it', 'is'],
['this', 'manner', 'BUT', 'the', 'dissolved']]
STeVe
More information about the Python-list
mailing list