merge 3.3 (#19805)
This commit is contained in:
commit
5143ce5a01
|
@ -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?
|
||||
------------------------------------------------------------------------------
|
||||
|
|
Loading…
Reference in New Issue