mirror of https://github.com/python/cpython
Have pprint() respect the order in an OrderedDict.
This commit is contained in:
parent
a0e79408bc
commit
bad3c88094
|
@ -35,7 +35,7 @@ saferepr()
|
|||
"""
|
||||
|
||||
import sys as _sys
|
||||
|
||||
from collections import OrderedDict as _OrderedDict
|
||||
from io import StringIO as _StringIO
|
||||
|
||||
__all__ = ["pprint","pformat","isreadable","isrecursive","saferepr",
|
||||
|
@ -163,7 +163,7 @@ class PrettyPrinter:
|
|||
|
||||
if sepLines:
|
||||
r = getattr(typ, "__repr__", None)
|
||||
if issubclass(typ, dict) and r is dict.__repr__:
|
||||
if issubclass(typ, dict):
|
||||
write('{')
|
||||
if self._indent_per_level > 1:
|
||||
write((self._indent_per_level - 1) * ' ')
|
||||
|
@ -171,6 +171,9 @@ class PrettyPrinter:
|
|||
if length:
|
||||
context[objid] = 1
|
||||
indent = indent + self._indent_per_level
|
||||
if issubclass(typ, _OrderedDict):
|
||||
items = list(object.items())
|
||||
else:
|
||||
items = sorted(object.items(), key=_safe_tuple)
|
||||
key, ent = items[0]
|
||||
rep = self._repr(key, context, level)
|
||||
|
|
|
@ -3,6 +3,8 @@ import test.support
|
|||
import unittest
|
||||
import test.test_set
|
||||
import random
|
||||
import collections
|
||||
import itertools
|
||||
|
||||
# list, tuple and dict subclasses that do or don't overwrite __repr__
|
||||
class list2(list):
|
||||
|
@ -195,6 +197,20 @@ class QueryTestCase(unittest.TestCase):
|
|||
self.assertEqual(pprint.pformat({"xy\tab\n": (3,), 5: [[]], (): {}}),
|
||||
r"{5: [[]], 'xy\tab\n': (3,), (): {}}")
|
||||
|
||||
def test_ordered_dict(self):
|
||||
words = 'the quick brown fox jumped over a lazy dog'.split()
|
||||
d = collections.OrderedDict(zip(words, itertools.count()))
|
||||
self.assertEqual(pprint.pformat(d),
|
||||
"""\
|
||||
{'the': 0,
|
||||
'quick': 1,
|
||||
'brown': 2,
|
||||
'fox': 3,
|
||||
'jumped': 4,
|
||||
'over': 5,
|
||||
'a': 6,
|
||||
'lazy': 7,
|
||||
'dog': 8}""")
|
||||
def test_subclassing(self):
|
||||
o = {'names with spaces': 'should be presented using repr()',
|
||||
'others.should.not.be': 'like.this'}
|
||||
|
|
Loading…
Reference in New Issue