Sort list of dictionaries

Chris Angelico rosuav at gmail.com
Tue Mar 3 02:07:04 EST 2015


On Tue, Mar 3, 2015 at 4:33 PM, Jason Friedman <jsf80238 at gmail.com> wrote:
>>> This is what I was trying but LooseVersion() was not sorting version numbers like I thought it would. You will notice that Chrome version "40.0.2214.111" is higher than "40.0.2214.91" but in the end result it's not sorting it that way.
>>
>> Because it's a string they're sorted lexicographically, and in that
>> ordering "40.0.2214.111" is less than "40.0.2214.91". Instead of a
>> string you should probably use some sort of version info tuple. A
>> simple tuple of ints may suffice, although you may need to get a
>> little cleverer if there are ever any version strings that aren't
>> entirely dotted numeric.
>
> Also, Python 3.4 comes with an ipaddress module.

Heh, I think that miiiiiiiight be a bit abusive :) I'm not sure that
you want to depend on the version numbers fitting inside the rules for
IP addresses, especially given that the example has a component of
"2214".

The right way to compare version numbers is usually to split them on
dots, then treat each part as a separate number. I say "usually"
because there are complications like "alpha", "RC", "-git", "+deb7u1",
and so on, but if the entire version number consists of digits and
dots, then tuple(int(x) for x in version_number.split(".")) will give
you a properly-sortable key.

BTW, Jason: It's usually courteous to acknowledge who you're quoting.
If you look at the top of my post here, you'll see that there's a line
saying your name and email address, and the date/time that you made
your post; but underneath that is just straight text, because your
post didn't extend the same courtesy to the previous posters. When you
trim quoted text, do please try to keep at least the first
acknowledgement line - the one showing who you're actually quoting.
Whether or not you keep additional headers is up to you (sometimes
it's easy, but other times it's fiddly), but the first one is your
responsibility. Thanks!

ChrisA



More information about the Python-list mailing list