Sort dictionary by value when value is a list

Chris Rebert clp at rebertia.com
Fri Nov 14 15:10:56 EST 2008


On Fri, Nov 14, 2008 at 10:26 AM, major-john <iamh2o at gmail.com> wrote:
> I'm having trouble sorting a dictionary based on values when the values are
> all lists, and i want to sort the list by key with the largest value lists
> in decreasing size.
>
> Currently, I have the following:
>
> from operator import itemgetter
>
> dict = {'A': [(10, 20), (12, 18), (5, 11), (18, 25)], 'C': [(1, 200)], 'B':
> [(1, 10), (100, 200), (150, 300), (250, 350), (300, 400)], 'D': [(3, 400)]}
>
> I have tried several methods, and seem to have come closest using:
>
> sorted(self.dict.items(), key=itemgetter(1), reverse=True)
>
> My problem is that this will return the key order A,D,C,B
> The order I want is based on the size of the lists each key points to:
> B,A,D,C or B,A,C,D
>
> Question:
> itemgetter(1) is just returning the value, which is a list.  How do I
> specify that I want the values to be sorted by list size?

You just need to add a call to len() in the key function:

sorted(self.dict.items(), key=lambda pair: len(pair[1]), reverse=True)

Cheers,
Chris
-- 
Follow the path of the Iguana...
http://rebertia.com

>
> Thanks!
> john
>
>
>
>
>
> --
> "We are healthy only to the extent that our ideas are humane." --Killgore
> Trout
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>
>



More information about the Python-list mailing list