Sort dictionary by value when value is a list

Vlastimil Brom vlastimil.brom at gmail.com
Fri Nov 14 14:10:43 EST 2008


2008/11/14 major-john <iamh2o at gmail.com>

> 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?
>
> Thanks!
> john
>
>
>
>
>
> --
> "We are healthy only to the extent that our ideas are humane." --Killgore
> Trout
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>
> You may try e.g.:

>>> sorted(d.items(), key=lambda x: max(x[1]), reverse=True)
[('B', [(1, 10), (100, 200), (150, 300), (250, 350), (300, 400)]), ('A',
[(10, 20), (12, 18), (5, 11), (18, 25)]), ('D', [(3, 400)]), ('C', [(1,
200)])]


(the dict is named d here in order not to shadow the builtin)
The ordering  of items containing  the same  highest  value  is undefined
here.
hth,
  vbr
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20081114/2b485e17/attachment-0001.html>


More information about the Python-list mailing list