Sort a nested dictionary in Python
Question: I have the following dictionary.

    
    
    var = a = { 
      'Black': { 'grams': 1906, 'price': 2.05},
      'Blue': { 'grams': 9526, 'price': 22.88},
      'Gold': { 'grams': 194, 'price': 8.24},
      'Magenta': { 'grams': 6035, 'price': 56.69},
      'Maroon': { 'grams': 922, 'price': 18.76},
      'Mint green': { 'grams': 9961, 'price': 63.89},
      'Orchid': { 'grams': 4970, 'price': 10.78},
      'Tan': { 'grams': 6738, 'price': 50.54},
      'Yellow': { 'grams': 6045, 'price': 54.19}
    }
    

How can I sort it based on the `price`. So the resulting dictionary will look
like below.

    
    
    result = { 
      'Black': { 'grams': 1906, 'price': 2.05},
      'Gold': { 'grams': 194, 'price': 8.24},
      'Orchid': { 'grams': 4970, 'price': 10.78},
      'Maroon': { 'grams': 922, 'price': 18.76},
      'Blue': { 'grams': 9526, 'price': 22.88},
      'Tan': { 'grams': 6738, 'price': 50.54},
      'Magenta': { 'grams': 6035, 'price': 56.69},
      'Mint green': { 'grams': 9961, 'price': 63.89}, 
    }
    


Answer: 
    for s in sorted(a.iteritems(), key=lambda (x, y): y['price']):
           print s
    

Or by OrderedDict

    
    
    from collections import OrderedDict
    res = OrderedDict(sorted(a.items(), key=lambda x: x[1]['price'], reverse=False))
    print res
    

Output:

    
    
    [('Black', {'price': 2.05, 'grams': 1906}), ('Gold', {'price': 8.24, 'grams': 194}), ('Orchid', {'price': 10.78, 'grams': 4970}), ('Maroon', {'price': 18.76, 'grams': 922}), ('Blue', {'price': 22.88, 'grams': 9526}), ('Tan', {'price': 50.54, 'grams': 6738}), ('Yellow', {'price': 54.19, 'grams': 6045}), ('Magenta', {'price': 56.69, 'grams': 6035}), ('Mint green', {'price': 63.89, 'grams': 9961})]
    

