Issue #23775: pprint() of OrderedDict now outputs the same representation

as repr().
This commit is contained in:
Serhiy Storchaka 2015-03-26 08:51:33 +02:00
parent f3fa308817
commit aa4c36fbbb
3 changed files with 40 additions and 24 deletions

View file

@ -34,10 +34,10 @@ saferepr()
"""
import collections as _collections
import re
import sys as _sys
import types as _types
from collections import OrderedDict as _OrderedDict
from io import StringIO as _StringIO
__all__ = ["pprint","pformat","isreadable","isrecursive","saferepr",
@ -188,16 +188,25 @@ class PrettyPrinter:
write((self._indent_per_level - 1) * ' ')
length = len(object)
if length:
if isinstance(object, _OrderedDict):
items = list(object.items())
else:
items = sorted(object.items(), key=_safe_tuple)
items = sorted(object.items(), key=_safe_tuple)
self._format_dict_items(items, stream, indent, allowance + 1,
context, level)
write('}')
_dispatch[dict.__repr__] = _pprint_dict
_dispatch[_OrderedDict.__repr__] = _pprint_dict
def _pprint_ordered_dict(self, object, stream, indent, allowance, context, level):
if not len(object):
stream.write(repr(object))
return
cls = object.__class__
stream.write(cls.__name__ + '(')
self._format(list(object.items()), stream,
indent + len(cls.__name__) + 1, allowance + 1,
context, level)
stream.write(')')
_dispatch[_collections.OrderedDict.__repr__] = _pprint_ordered_dict
def _pprint_list(self, object, stream, indent, allowance, context, level):
stream.write('[')