Differences between revisions 5 and 8 (spanning 3 versions)
Revision 5 as of 2003-11-21 23:50:57
Size: 969
Editor: ip503dabc3
Comment: dict_ explanation
Revision 8 as of 2003-12-26 02:20:59
Size: 877
Editor: ti211310a080-4332
Comment: l should be decorated
Deletions are marked like this. Additions are marked like this.
Line 24: Line 24:
sorted = [dict_ for (key, dict_) in l] sorted = [dict_ for (key, dict_) in decorated]
Line 27: Line 27:
In case you're wondering, the variable is named `dict_` because we want to have Wiki:MeaningfulNames, but we don't want to shadow the `dict` builtin, so we append an underscore. (The variable was named {{{dict_}}} because {{{dict}}} is already a builtin.)

Sorting Lists of Dictionaries

Frequently you want to sort a list of dictionaries, based on some particular key.

For example:

   1 a = {"key1": 5 , "key2": 8, "key3": 2}
   2 b = {"key1": 7 , "key2": 4, "key3": 9}
   3 c = {"key1": 6 , "key2": 1, "key3": 1}
   4 undecorated = [a, b, c] # how do you sort this list?

There are many ways to do this. Here's the fastest way to do it, as it avoids using a custom comparison function, instead using builtin comparisons. This is the decorate-sort-undecorate pattern, or the Schwartzian transform if you're coming from Perl.

   1 sort_on = "key2"
   2 decorated = [(dict_[sort_on], dict_) for dict_ in undecorated]
   3 decorated.sort()
   4 sorted = [dict_ for (key, dict_) in decorated]

(The variable was named dict_ because dict is already a builtin.)

SortingListsOfDictionaries (last edited 2010-03-30 19:08:00 by wl-ol-s246-130)

Unable to edit the page? See the FrontPage for instructions.