Ken, 

I misspoke when I said these were lists of dictionaries, they are actually
lists of object that have a "getSize()" getter function that returns the
size of their contents, which I would like to use for sorting.

Thank You,

John A. Gooch
Systems Administrator
IT - Tools
EchoStar Satellite L.L.C.
9601 S. Meridian Blvd.
Englewood, CO  80112
Desk: 720-514-5708 


-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf
Of Kent Johnson
Sent: Wednesday, April 13, 2005 3:52 AM
Cc: tutor@python.org
Subject: Re: [Tutor] sorting a list of dictionaries


> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> Sent: Thursday, December 09, 2004 12:19 PM
> To: tutor@python.org
> Subject: Re: [Tutor] sorting a list of dictionaries
> 
> 
> On  9 Dez 2004, [EMAIL PROTECTED] wrote:
> 
> 
>>I have a list of dictionaries, each representing info about a file,
>>something like:
>>
>>[{'name':'foo.txt','size':35}, {'name':'bar.txt','size':35}, ...]
>>
>>I want to present a sorted list of all the files' data, sorting on the
>>keys 'name' or 'size'. The file 'name' s should be unique (I'm hoping) 
>>across all the dictionaries. Can someone point me towards an efficient 
>>solution for accomplishing the sort? (The list has 1000s of files).
> 
> 
> That's easy to achieve, since sort takes a custom sort function as 
> optional argument.  Now you need only a function which takes the 
> values of the fileds and compares them.
> 
> E.g.
> 
> lst.sort(lambda m, n: cmp(m.get(field), n.get(field)))
> where field is either 'name' or 'size'.

In Python 2.4 a more efficient way of doing this is to use the key parameter
to sort() with an 
itemgetter function:

from operator import itemgetter
lst.sort(key=itemgetter('field'))

Kent

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to