From 8b7a15be0a1fac809dcb5c7bd9ed7aacc3baff19 Mon Sep 17 00:00:00 2001 From: Yoann Guillard Date: Thu, 5 Sep 2019 05:50:51 +0200 Subject: [PATCH 1/2] remove sorting bug (but slow) Remove int / str keys sorting error due to dict with integers and strings keys (TypeError: '<' not supported between instances of 'int' and 'str') Using str() for each key could slow significantly the treatment ! --- Lib/json/encoder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/json/encoder.py b/Lib/json/encoder.py index c8c78b9c237652..ecc2b31f8eca38 100644 --- a/Lib/json/encoder.py +++ b/Lib/json/encoder.py @@ -350,7 +350,7 @@ def _iterencode_dict(dct, _current_indent_level): item_separator = _item_separator first = True if _sort_keys: - items = sorted(dct.items()) + items = sorted(dct.items(), key=lambda k: str(k[0])) else: items = dct.items() for key, value in items: From e6f1089eac15a68da23ba89f24f87f210b02ef1c Mon Sep 17 00:00:00 2001 From: Yoann Guillard Date: Fri, 6 Sep 2019 21:07:04 +0200 Subject: [PATCH 2/2] add try exept --- Lib/json/encoder.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Lib/json/encoder.py b/Lib/json/encoder.py index ecc2b31f8eca38..f4150c3665d610 100644 --- a/Lib/json/encoder.py +++ b/Lib/json/encoder.py @@ -350,7 +350,10 @@ def _iterencode_dict(dct, _current_indent_level): item_separator = _item_separator first = True if _sort_keys: - items = sorted(dct.items(), key=lambda k: str(k[0])) + try: + items = sorted(dct.items()) + except(TypeError): + items = sorted(dct.items(), key=lambda kv: str(kv[0])) else: items = dct.items() for key, value in items: