How to sort a list of dicts in Python
I'm using the MongoDB group function (it's similar to SQL's GROUP BY) to aggregate some results for my live-log-analyzer project. This function is pretty cool, but it does not sort the grouped data. Here is how to sort the data. (It is only one line of Python, but I have a hard time remembering how to do this.)
DATA is the output of the mongoDB group function. I want to sort this list
of dicts by 'ups_ad'.
from pprint import pprint
DATA = [
{u'avg': 2.9165000000000001,
u'count': 10.0,
u'total': 29.165000000000003,
u'ups_ad': u'10.194.154.49:80'},
{u'avg': 2.6931000000000003,
u'count': 10.0,
u'total': 26.931000000000001,
u'ups_ad': u'10.194.155.176:80'},
{u'avg': 1.9860909090909091,
u'count': 11.0,
u'total': 21.847000000000001,
u'ups_ad': u'10.195.71.146:80'},
{u'avg': 1.742818181818182,
u'count': 11.0,
u'total': 19.171000000000003,
u'ups_ad': u'10.194.155.48:80'}
]
data_sorted = sorted(DATA, key=lambda item: item['ups_ad'])
pprint(data_sorted)
Results:
[{u'avg': 2.9165000000000001,
u'count': 10.0,
u'total': 29.165000000000003,
u'ups_ad': u'10.194.154.49:80'},
{u'avg': 2.6931000000000003,
u'count': 10.0,
u'total': 26.931000000000001,
u'ups_ad': u'10.194.155.176:80'},
{u'avg': 1.742818181818182,
u'count': 11.0,
u'total': 19.171000000000003,
u'ups_ad': u'10.194.155.48:80'},
{u'avg': 1.9860909090909091,
u'count': 11.0,
u'total': 21.847000000000001,
u'ups_ad': u'10.195.71.146:80'}]
References:
Update 2010-04-28: Apparently I didn't use Google properly when I first wrote this post. Searching today produced several sources for doing exactly this.
- David Ziegler's Blog - Sorting a List of Dictionaries in Python
- Stack Overflow - In Python how do I sort a list of dictionaries by values of the dictionary?
- code.random() - Python: Sort a list of dicts by dict-key
- PythonInfo Wiki - Sorting Lists of Dictionaries
Related posts
- Python setdefault example — posted 2010-02-09
- How to conditionally replace items in a list — posted 2008-08-22
- How to use Python's enumerate and zip to iterate over two lists and their indices. — posted 2008-04-18
- How to invert a dict in Python — posted 2008-01-14
- How to find the intersection and union of two lists in Python — posted 2008-01-03
1
Comment
—
Comments feed for this post
Post a comment
About
I'm Eliot and this is my notepad for programming topics such as Python, Django, Ubuntu, Emacs, etc... more »
Search Blog
Tags
-
algorithms
(5)
-
aws
(9)
-
blogproject
(20)
-
c_cplusplus
(12)
-
cardstore
(8)
-
colinux
(2)
-
concurrency
(13)
-
conkeror
(2)
-
core
(2)
-
cygwin
(17)
-
datastructures
(14)
-
datetime
(4)
-
decorators
(4)
-
django
(40)
-
emacs
(22)
-
files_directories
(11)
-
git
(5)
-
hardware
(5)
-
install_setup
(8)
-
javascript
(3)
-
keyboard
(9)
-
matplotlib
(5)
-
mercurial
(4)
-
nginx
(2)
-
persistence
(5)
-
preferences
(7)
-
processes
(4)
-
pyqt
(18)
-
python
(144)
-
ratpoison
(3)
-
regexes
(6)
-
rsync
(3)
-
softwaretools
(17)
-
sql
(14)
-
ssh
(10)
-
subversion
(6)
-
twisted
(7)
-
ubuntu
(65)
-
urxvt
(5)
-
vxworks
(25)
-
webdev
(5)
-
wmii
(7)
Blogroll
- Adam Gomaa
- Alex Clemesha
- Amir Salihefendic
- Armin Ronacher
- David Beazley
- David Ziegler
- Duncan McGreggor
- Gareth Rushgrave
- Glyph Lefkowitz
- Guido van Rossum
- Ian Bicking
- Jacob Kaplan-Moss
- James Bennett
- James Tauber
- Jesper Noehr
- Marty Alchin
- Matt Harrison
- Nikolay Kolev
- Parand Darugar
- Peter Baumgartner
- Peter Bengtsson
- Rob Hudson
- Simon Willison
- Will McGugan
#1 Beni Cherniavsky-Paskin commented on 2010-08-31:
You can also do
sorted(DATA, key=operator.itemgettr('ups_ad'))See also operator.attrgetter() and operator.methodcaller().