recommend OrderedDict for this FAQ (closes #19805)

This commit is contained in:
Benjamin Peterson 2013-11-26 23:05:25 -06:00
parent 0ee22bf774
commit b152e177ef
1 changed files with 3 additions and 27 deletions

View File

@ -1193,34 +1193,10 @@ that final assignment still results in an error, because tuples are immutable.
Dictionaries
============
How can I get a dictionary to display its keys in a consistent order?
---------------------------------------------------------------------
You can't. Dictionaries store their keys in an unpredictable order, so the
display order of a dictionary's elements will be similarly unpredictable.
This can be frustrating if you want to save a printable version to a file, make
some changes and then compare it with some other printed dictionary. In this
case, use the ``pprint`` module to pretty-print the dictionary; the items will
be presented in order sorted by the key.
A more complicated solution is to subclass ``dict`` to create a
``SortedDict`` class that prints itself in a predictable order. Here's one
simpleminded implementation of such a class::
class SortedDict(dict):
def __repr__(self):
keys = sorted(self.keys())
result = ("{!r}: {!r}".format(k, self[k]) for k in keys)
return "{{{}}}".format(", ".join(result))
__str__ = __repr__
This will work for many common situations you might encounter, though it's far
from a perfect solution. The largest flaw is that if some values in the
dictionary are also dictionaries, their values won't be presented in any
particular order.
How can I get a dictionary to store and display its keys in a consistent order?
-------------------------------------------------------------------------------
Use :class:`collections.OrderedDict`.
I want to do a complicated sort: can you do a Schwartzian Transform in Python?
------------------------------------------------------------------------------