From ce1b61516a408b47e19457690108390a5143247b Mon Sep 17 00:00:00 2001 From: warden127 Date: Fri, 14 Aug 2026 22:34:55 +0200 Subject: [PATCH 1/2] Add tests for `reprlib.Repr(sort_dicts=)` --- Lib/test/test_reprlib.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Lib/test/test_reprlib.py b/Lib/test/test_reprlib.py index 5a95a05c6496a29..16c32698102505b 100644 --- a/Lib/test/test_reprlib.py +++ b/Lib/test/test_reprlib.py @@ -273,6 +273,24 @@ def test_unsortable(self): r(y) r(z) + def test_sort_dicts_true(self): + r = Repr(sort_dicts=True) + d = {"zaz": 3, "xoo": 1, "yar": 2} + e = dict(sorted(d.items())) + self.assertEqual(r.repr(d), __builtins__.repr(e)) + + def test_sort_dicts_false(self): + r = Repr(sort_dicts=False) + d = {"zaz": 3, "xoo": 1, "yar": 2} + e = dict(d) + self.assertEqual(r.repr(d), __builtins__.repr(e)) + + def test_sort_dicts_default(self): + r = Repr() + d = {"zaz": 3, "xoo": 1, "yar": 2} + e = dict(sorted(d.items())) + self.assertEqual(r.repr(d), __builtins__.repr(e)) + def test_valid_indent(self): test_cases = [ { From d3969365738a747109be5ebb8b46f14229b6b228 Mon Sep 17 00:00:00 2001 From: warden127 Date: Fri, 14 Aug 2026 22:36:02 +0200 Subject: [PATCH 2/2] Implement `reprlib.Repr(sort_dicts=)` --- Lib/reprlib.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Lib/reprlib.py b/Lib/reprlib.py index ab18247682b69aa..6a065a8927b751f 100644 --- a/Lib/reprlib.py +++ b/Lib/reprlib.py @@ -51,7 +51,7 @@ class Repr: def __init__( self, *, maxlevel=6, maxtuple=6, maxlist=6, maxarray=5, maxdict=4, maxset=6, maxfrozenset=6, maxdeque=6, maxstring=30, maxlong=40, - maxother=30, fillvalue='...', indent=None, + maxother=30, fillvalue='...', indent=None, sort_dicts=True, ): self.maxlevel = maxlevel self.maxtuple = maxtuple @@ -66,6 +66,7 @@ def __init__( self.maxother = maxother self.fillvalue = fillvalue self.indent = indent + self.sort_dicts = sort_dicts def repr(self, x): return self.repr1(x, self.maxlevel) @@ -162,7 +163,8 @@ def repr_dict(self, x, level): newlevel = level - 1 repr1 = self.repr1 pieces = [] - for key in islice(_possibly_sorted(x), self.maxdict): + keys = _possibly_sorted(x) if self.sort_dicts else list(x) + for key in islice(keys, self.maxdict): keyrepr = repr1(key, newlevel) valrepr = repr1(x[key], newlevel) pieces.append('%s: %s' % (keyrepr, valrepr))