Sort list of dictionaries

Peter Otten __peter__ at web.de
Mon Mar 2 14:23:13 EST 2015


Charles Heizer wrote:

> Never mind, the light bulb finally went off. :-\
> 
> sortedlist = sorted(mylist , key=lambda elem: "%s %s" % ( elem['name'],
> (".".join([i.zfill(5) for i in elem['version'].split(".")])) ),
> reverse=True)

This lightbulb will break with version numbers > 99999 ;)

Here are two alternatives:

result = sorted(
    mylist,
    key=lambda elem: (elem['name'], LooseVersion(elem['version'])),
    reverse=True)

result = sorted(
    mylist,
    key=lambda e: (e["name"], tuple(map(int, e["version"].split(".")))),
    reverse=True)


Personally, I prefer to not use a lambda:

def name_version(elem):
    return elem['name'], LooseVersion(elem['version'])
    
result = sorted(mylist, key=name_version, reverse=True)





More information about the Python-list mailing list