[Tutor] array of different datatypes

Martin Walsh mwalsh at mwalsh.org
Tue Sep 23 21:07:00 CEST 2008


Reed O'Brien wrote:
> On Sep 22, 2008, at 11:50 PM, Steve Willoughby wrote:
> 
>> Dinesh B Vadhia wrote:
>>> Thanks Steve.  How do you sort on the second element of each list to
>>> get:
>>> a' = [[42, 'fish'],
>>>        [1, 'hello']
>>>        [2, 'world']
>>>        ]
>>
>> something like this would do the trick:
>>
>> a_prime = sorted(a, key=(lambda i: i[1]))
>>
>> sorted(a) returns a new list consisting of the elements in a
>> but in sorted order.  the key= parameter says how to derive the
>> sort key from any given element; in this case, the elements
>> being sorted are themselves lists, and element #1 in the sub-list
>> (a.k.a. "row") is the key.
> 
> try itemgetter:
> 
> In [1]: a = [[42, 'fish'],
>    ...:      [2, 'world'],
>    ...:      [1, 'hello']]
> 
> In [2]: from operator import itemgetter
> In [3]: sorted(a, key=itemgetter(1))
> 
> Out[3]: [[42, 'fish'], [1, 'hello'], [2, 'world']]
> 
>>> From: Steve Willoughby Sent: Monday, September 22, 2008 8:16 PM
>>> To: Dinesh B Vadhia Cc: tutor at python.org Subject: Re: [Tutor] array
>>> of different datatypes
>>> Dinesh B Vadhia wrote:
>>>> I have looked (honestly!) and cannot see an array structure to allow
>>>> different datatypes per column.  I need a 2 column array with column
>>>> 1 = an integer and column 2 = chars, and after populating the array,
>>>> sort on column 2 with column 1 sorted relatively.

itemgetter also allows you to do something like this (2.5 and later)...

In [1]: a = [[42, 'fish'],
             [1, 'hello'],
             [2, 'world'],
             [41, 'fish']]

In [2]: sorted(a, key=itemgetter(1, 0))
Out[2]: [[41, 'fish'], [42, 'fish'], [1, 'hello'], [2, 'world']]

... which would give you the "relative" sort you asked about for column
1.  But at that point, if I had control over the input data structure --
I would probably reverse the order, and then just use a vanilla sorted
call without any key arg.

>>> If by "array" you mean a regular Python list, the data type of
>>> every single element may be different.  So it's just how lists
>>> always work.
>>> a = [[1, 'hello'],
>>>      [2, 'world'],
>>>      [42, 'fish'],
>>>     ]
>>>> Thanks!
>>>>
>>>> Dinesh



More information about the Tutor mailing list