How to sort list of dictionary by value python

Sort list of dictionary by value python

Introduction

Consider we have a Python list that contains 3 dictionaries:

[{'name':'John', 'age':20}, {'name':'Bob', 'age':15}, {'name':'Charles', 'age':30}]

When sorted by name, should become:

[{'name':'Bob', 'age':15}, {'name':'Charles', 'age':30}, {'name':'John', 'age':20}]

Using sorted funciton with lambda

original_list = [{
    'name': 'John',
    'age': 20
}, {
    'name': 'Bob',
    'age': 15
}, {
    'name': 'Charles',
    'age': 30
}]

newlist = sorted(original_list, key=lambda k: k['name'])
print(newlist)

Output:

[{'name': 'Bob', 'age': 15}, {'name': 'Charles', 'age': 30}, {'name': 'John', 'age': 20}]

If sort using age:

newlist = sorted(original_list, key=lambda k: k['age'])
print(newlist)

Out:

[{'name': 'Bob', 'age': 15}, {'name': 'John', 'age': 20}, {'name': 'Charles', 'age': 30}]

Add reverse=True to sort descending

newlist = sorted(original_list, key=lambda k: k['name'], reverse=True)
print(newlist)

Out:

[{'name': 'John', 'age': 20}, {'name': 'Charles', 'age': 30}, {'name': 'Bob', 'age': 15}]

Using operator module

import operator
print('Before sorting:')
print(original_list)
original_list.sort(key=operator.itemgetter('name'))
print('After sorting:')
print(original_list)

Out:

Before sorting:
[{'name': 'John', 'age': 20}, {'name': 'Bob', 'age': 15}, {'name': 'Charles', 'age': 30}]
After sorting:
[{'name': 'Bob', 'age': 15}, {'name': 'Charles', 'age': 30}, {'name': 'John', 'age': 20}]

Completed example code

original_list = [{
    'name': 'John',
    'age': 20
}, {
    'name': 'Bob',
    'age': 15
}, {
    'name': 'Charles',
    'age': 30
}]

newlist = sorted(original_list, key=lambda k: k['name'])

print(newlist)

newlist = sorted(original_list, key=lambda k: k['age'])

print(newlist)

newlist = sorted(original_list, key=lambda k: k['name'], reverse=True)
print(newlist)

import operator
print('Before sorting:')
print(original_list)
original_list.sort(key=operator.itemgetter('name'))
print('After sorting:')
print(original_list)
Last modified October 4, 2020