2008/11/14 major-john <[EMAIL PROTECTED]> > 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
-- http://mail.python.org/mailman/listinfo/python-list