[Python-Dev] Guarantee ordered dict literals in v3.7?
Steven D'Aprano
steve at pearwood.info
Mon Dec 18 22:41:55 EST 2017
On Mon, Dec 18, 2017 at 06:11:05PM -0800, Chris Barker wrote:
> Now that dicts are order-preserving, maybe we should change prettyprint:
>
> In [7]: d = {'one':1, 'two':2, 'three':3}
>
> In [8]: print(d)
> {'one': 1, 'two': 2, 'three': 3}
>
> order preserved.
>
> In [9]: pprint.pprint(d)
> {'one': 1, 'three': 3, 'two': 2}
>
> order not preserved ( sorted, I presume? )
Indeed. pprint.PrettyPrinter has separate methods for OrderedDict and
regular dicts, and the method for printing dicts calls sorted() while
the other does not.
> With arbitrary order, it made sense to sort, so as to always give the same
> "pretty" representation. But now that order is "part of" the dict itself,
> it seems prettyprint should present the preserved order of the dict.
I disagree. Many uses of dicts are still conceptually unordered, even if
the dict now preserves insertion order. For those use-cases, insertion
order is of no interest whatsoever, and sorting is still "prettier".
--
Steve
More information about the Python-Dev
mailing list