Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In an OrderedDict how to sort by a particular attribute? [closed]

I am trying to sort the following OrderedDict by doing the following-->

>>> from collections import OrderedDict
>>> d = OrderedDict([(4995L, [{'isbn_13': u'9788131805923', 'book_quantity': 49L, 'seller_book_id': 4995L, 'book_id': 4995L, 'title': u'Industrial Automation and Robotics', 'selling_price': 292.0, 'id': 4995L, 'condition': 'New Book'}]), (6657L, [{'isbn_13': u'9788122425925', 'book_quantity': 49L, 'seller_book_id': 6657L, 'book_id': 6657L, 'title': u'A Textbook of Agricultural Statistics', 'selling_price': 243.0, 'id': 6657L, 'condition': 'New Book'}]), (6137L, [{'isbn_13': u'9788122425727\n', 'book_quantity': 50L, 'seller_book_id': 6137L, 'book_id': 6137L, 'title': u'A Guide to Corporate Governance', 'selling_price': 247.0, 'id': 6137L, 'condition': 'New Book'}]), (6260L, [{'isbn_13': u'9788122414394\n', 'book_quantity': 50L, 'seller_book_id': 6260L, 'book_id': 6260L, 'title': u'Management Accounting \n', 'selling_price': 269.0, 'id': 6260L, 'condition': 'New Book'}])])


>>> OrderedDict(sorted(d.items(), key=lambda item: item[1][0]['selling_price']))

by the selling_price attribute. But I am not being able to do it.

I tried to apply the concept discussed in this How to sort OrderedDict of OrderedDict? for normal OrderedDict but it did not work. Can someone please help me out? TIA

like image 388
Subhajit Avatar asked Dec 24 '22 11:12

Subhajit


1 Answers

Solution

This should work for the ordered dictionary d:

OrderedDict(sorted(d.items(), key=lambda item: item[1][0]['selling_price']))

Application

>>> d
OrderedDict([(7484,
              [{'book_id': 7484,
                'book_quantity': 43,
                'condition': 'New Book',
                'id': 7484,
                'isbn_13': '9788131727591',
                'seller_book_id': 7484,
                'selling_price': 629.0,
                'title': 'Network Management:  Principles and Practice,  2/e'}]),
             (7485,
              [{'book_id': 7484,
                'book_quantity': 43,
                'condition': 'New Book',
                'id': 7484,
                'isbn_13': '9788131727591',
                'seller_book_id': 7484,
                'selling_price': 29.0,
                'title': 'Network Management:  Principles and Practice,  2/e'}])])

>>> OrderedDict(sorted(d.items(), key=lambda item: item[1][0]['selling_price']))
OrderedDict([(7485,
              [{'book_id': 7484,
                'book_quantity': 43,
                'condition': 'New Book',
                'id': 7484,
                'isbn_13': '9788131727591',
                'seller_book_id': 7484,
                'selling_price': 29.0,
                'title': 'Network Management:  Principles and Practice,  2/e'}]),
             (7484,
              [{'book_id': 7484,
                'book_quantity': 43,
                'condition': 'New Book',
                'id': 7484,
                'isbn_13': '9788131727591',
                'seller_book_id': 7484,
                'selling_price': 629.0,
                'title': 'Network Management:  Principles and Practice,  2/e'}])])

Sorted by 'selling_price': 29.0 is less than 'selling_price': 629.0.

like image 138
Mike Müller Avatar answered Apr 26 '23 23:04

Mike Müller