Re: Incompatible change discussion: Pretty printing of ordered dict.

Yarko Tymciurak <[email protected]> Fri, 4 Aug 2017 13:23:17 -0500
Newsgroups gmane.comp.python.ipython.devel
Message-ID <CAJ+Z=PLv8---9i7YE6ejaGoL2so3Y5vaWxcivyQj-eXM5yAidw@mail.gmail.com>
--===============9116516357764202608==
Content-Type: multipart/alternative; boundary="001a114cad4c6652740555f19767"

--001a114cad4c6652740555f19767
Content-Type: text/plain; charset="UTF-8"

In [16]: d = {'c':3,'b':2,'a':1}

In [17]: d
Out[17]: {'a': 1, 'b': 2, 'c': 3}

In [18]: repr(d)
Out[18]: "{'c': 3, 'b': 2, 'a': 1}"

In [19]: import pprint

In [20]: pprint.pprint(d)
{'a': 1, 'b': 2, 'c': 3}

In [21]: print(d)
{'c': 3, 'b': 2, 'a': 1}

In [22]: print(pprint.pformat(d))
{'a': 1, 'b': 2, 'c': 3}


On Fri, Aug 4, 2017 at 10:21 AM, Steve Holden <[email protected]> wrote:

> It's always difficult to change a long-established behaviour. I'd prefer
> that dict  printing stayed as it is - I haven't seen many complaints so
> far, and as has been pointed out the key ordering is available if required.
>  S
>
> Sent from my iPhone
>
> On 4 Aug 2017, at 15:36, Wes Turner <[email protected]> wrote:
>
> ```python
> repr(dict)
>
> import pprint
> pprint.pprint(dict)
> print(pprint.pformat(dict)
> ```
>
> On Friday, August 4, 2017, MinRK <[email protected]> wrote:
>
>> I'm pretty strongly in favor of keeping the sorting in our default
>> pretty-printing. It's extremely valuable for interacting with dictionaries
>> to have consistent, predictable display. There are plenty of ways to
>> illustrate dict ordering, such as by iterating through the dict , e.g.
>> `list(dict)`.
>>
>> -Min
>>
>> On Thu, Aug 3, 2017 at 6:38 PM, Carl Smith <[email protected]> wrote:
>>
>>> I'm with Thomas.
>>>
>>> On Wed, 2 Aug 2017 22:30 Wes Turner, <[email protected]> wrote:
>>>
>>>> Maybe a SORT_DICT_KEYS bool configuration setting? Really practically
>>>> only in order to teach:
>>>>
>>>> - dict
>>>>   - https://docs.python.org/3/tutorial/datastructures.html#dictionaries
>>>> - PYTHONHASHSEED / -R
>>>>   - https://docs.python.org/3/using/cmdline.html#envvar-PYTHONHASHSEED
>>>>   - https://docs.python.org/3/using/cmdline.html#cmdoption-R
>>>> - collections.OrderedDict (is backwards compatible)
>>>>   - https://docs.python.org/3/library/collections.html#ordered
>>>> dict-objects
>>>>
>>>>
>>>>
>>>> On Wednesday, August 2, 2017, Matthias Bussonnier <
>>>> [email protected]> wrote:
>>>>
>>>>> Hi all,
>>>>>
>>>>> As you may or may not be aware, with Python 3.6 the dictionary are
>>>>> ordered by default. It is technically an implementation detail, though
>>>>> some people would love for it not to.
>>>>>
>>>>> Regardless, IPython has for a long time pretty-printed the dictionary
>>>>> with _sorted_ keys, this thus prevent to teach python and show that
>>>>> dictionaries maintain order. Thus there is the question of wether we
>>>>> should disable sorting keys while pretty-printing.
>>>>>
>>>>> https://github.com/ipython/ipython/issues/10110
>>>>>
>>>>> This seem like a minor change, but I'd like to know if some of you are
>>>>> _relying_ on the ordering of dict when they are printed, or have
>>>>> compelling arguments against (or for) removing sorting of the keys
>>>>> before pretty_printing.
>>>>>
>>>>> If you care about the above subject, please have your voice heard in
>>>>> above issue.
>>>>>
>>>>> Thanks,
>>>>> --
>>>>> Matthias
>>>>> _______________________________________________
>>>>> IPython-dev mailing list
>>>>> [email protected]
>>>>> https://mail.python.org/mailman/listinfo/ipython-dev
>>>>>
>>>> _______________________________________________
>>>> IPython-dev mailing list
>>>> [email protected]
>>>> https://mail.python.org/mailman/listinfo/ipython-dev
>>>>
>>>
>>> _______________________________________________
>>> IPython-dev mailing list
>>> [email protected]
>>> https://mail.python.org/mailman/listinfo/ipython-dev
>>>
>>>
>> _______________________________________________
> IPython-dev mailing list
> [email protected]
> https://mail.python.org/mailman/listinfo/ipython-dev
>
>
> _______________________________________________
> IPython-dev mailing list
> [email protected]
> https://mail.python.org/mailman/listinfo/ipython-dev
>
>

--001a114cad4c6652740555f19767
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>In [16]: d =3D {&#39;c&#39;:3,&#39;b&#39;:2,&#39;a&#3=
9;:1}</div><div><br></div><div>In [17]: d</div><div>Out[17]: {&#39;a&#39;: =
1, &#39;b&#39;: 2, &#39;c&#39;: 3}</div><div><br></div><div>In [18]: repr(d=
)</div><div>Out[18]: &quot;{&#39;c&#39;: 3, &#39;b&#39;: 2, &#39;a&#39;: 1}=
&quot;</div><div><br></div><div>In [19]: import pprint</div><div><br></div>=
<div>In [20]: pprint.pprint(d)</div><div>{&#39;a&#39;: 1, &#39;b&#39;: 2, &=
#39;c&#39;: 3}</div><div><br></div><div>In [21]: print(d)</div><div>{&#39;c=
&#39;: 3, &#39;b&#39;: 2, &#39;a&#39;: 1}</div><div><br></div><div>In [22]:=
 print(pprint.pformat(d))</div><div>{&#39;a&#39;: 1, &#39;b&#39;: 2, &#39;c=
&#39;: 3}</div><div><br></div></div><div class=3D"gmail_extra"><br><div cla=
ss=3D"gmail_quote">On Fri, Aug 4, 2017 at 10:21 AM, Steve Holden <span dir=
=3D"ltr">&lt;<a href=3D"mailto:[email protected]" target=3D"_blank">steve=
@holdenweb.com</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" s=
tyle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div=
 dir=3D"auto"><div>It&#39;s always difficult to change a long-established b=
ehaviour. I&#39;d prefer that dict =C2=A0printing stayed as it is - I haven=
&#39;t seen many complaints so far, and as has been pointed out the key ord=
ering is available if required. =C2=A0S<br><br>Sent from my iPhone</div><di=
v><div class=3D"h5"><div><br>On 4 Aug 2017, at 15:36, Wes Turner &lt;<a hre=
f=3D"mailto:[email protected]" target=3D"_blank">[email protected]</a=
>&gt; wrote:<br><br></div><blockquote type=3D"cite"><div><div>```python</di=
v>repr(dict)<div><br></div><div>import pprint</div><div>pprint.pprint(dict)=
</div><div>print(pprint.pformat(dict)</div><div>```<br><br>On Friday, Augus=
t 4, 2017, MinRK &lt;<a href=3D"mailto:[email protected]" target=3D"_bla=
nk">[email protected]</a>&gt; wrote:<br><blockquote class=3D"gmail_quote=
" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><=
div dir=3D"ltr">I&#39;m pretty strongly in favor of keeping the sorting in =
our default pretty-printing. It&#39;s extremely valuable for interacting wi=
th dictionaries to have consistent, predictable display. There are plenty o=
f ways to illustrate dict ordering, such as by iterating through the dict ,=
 e.g. `list(dict)`.<div><br></div><div>-Min</div></div><div class=3D"gmail_=
extra"><br><div class=3D"gmail_quote">On Thu, Aug 3, 2017 at 6:38 PM, Carl =
Smith <span dir=3D"ltr">&lt;<a>[email protected]</a>&gt;</span> wrote:<b=
r><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:=
1px #ccc solid;padding-left:1ex"><p dir=3D"ltr">I&#39;m with Thomas. </p><d=
iv><div>
<br><div class=3D"gmail_quote"><div dir=3D"ltr">On Wed, 2 Aug 2017 22:30 We=
s Turner, &lt;<a>[email protected]</a>&gt; wrote:<br></div><blockquote c=
lass=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;=
padding-left:1ex">Maybe a SORT_DICT_KEYS bool configuration setting? Really=
 practically only in order to teach:<div><br></div><div>- dict</div><div>=
=C2=A0 -=C2=A0<a href=3D"https://docs.python.org/3/tutorial/datastructures.=
html#dictionaries" target=3D"_blank">https://docs.python.org/3/tu<wbr>toria=
l/datastructures.html#dic<wbr>tionaries</a></div><div>-=C2=A0<span style=3D=
"color:rgb(34,34,34);font-family:Roboto-Regular,HelveticaNeue,Arial,sans-se=
rif;font-size:14px">PYTHONHASHSEED / -R</span></div><div><span style=3D"col=
or:rgb(34,34,34);font-family:Roboto-Regular,HelveticaNeue,Arial,sans-serif;=
font-size:14px">=C2=A0 -=C2=A0</span><font color=3D"#222222" face=3D"Roboto=
-Regular, HelveticaNeue, Arial, sans-serif"><span style=3D"font-size:14px">=
<a href=3D"https://docs.python.org/3/using/cmdline.html#envvar-PYTHONHASHSE=
ED" target=3D"_blank">https://docs.python.org/3/us<wbr>ing/cmdline.html#env=
var-PYTHON<wbr>HASHSEED</a></span></font></div><div><font color=3D"#222222"=
 face=3D"Roboto-Regular, HelveticaNeue, Arial, sans-serif"><span style=3D"f=
ont-size:14px">=C2=A0 - <a href=3D"https://docs.python.org/3/using/cmdline.=
html#cmdoption-R" target=3D"_blank">https://docs.python.org/3/usin<wbr>g/cm=
dline.html#cmdoption-R</a></span></font></div><div><font color=3D"#222222" =
face=3D"Roboto-Regular, HelveticaNeue, Arial, sans-serif"><span style=3D"fo=
nt-size:14px">- collections.OrderedDict (is backwards compatible)</span></f=
ont></div><div><span style=3D"color:rgb(34,34,34);font-family:Roboto-Regula=
r,HelveticaNeue,Arial,sans-serif;font-size:14px">=C2=A0 -=C2=A0<a href=3D"h=
ttps://docs.python.org/3/library/collections.html#ordereddict-objects" targ=
et=3D"_blank">https://docs.python.org/3/li<wbr>brary/collections.html#order=
ed<wbr>dict-objects</a></span></div><div><font color=3D"#222222" face=3D"Ro=
boto-Regular, HelveticaNeue, Arial, sans-serif"><span style=3D"font-size:14=
px"><br></span></font></div><div><font color=3D"#222222" face=3D"Roboto-Reg=
ular, HelveticaNeue, Arial, sans-serif"><span style=3D"font-size:14px"><br>=
</span></font><br>On Wednesday, August 2, 2017, Matthias Bussonnier &lt;<a>=
[email protected]</a>&gt; wrote:<br><blockquote class=3D"gmail_q=
uote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1e=
x">Hi all,<br>
<br>
As you may or may not be aware, with Python 3.6 the dictionary are<br>
ordered by default. It is technically an implementation detail, though<br>
some people would love for it not to.<br>
<br>
Regardless, IPython has for a long time pretty-printed the dictionary<br>
with _sorted_ keys, this thus prevent to teach python and show that<br>
dictionaries maintain order. Thus there is the question of wether we<br>
should disable sorting keys while pretty-printing.<br>
<br>
<a href=3D"https://github.com/ipython/ipython/issues/10110" target=3D"_blan=
k">https://github.com/ipython/ipy<wbr>thon/issues/10110</a><br>
<br>
This seem like a minor change, but I&#39;d like to know if some of you are<=
br>
_relying_ on the ordering of dict when they are printed, or have<br>
compelling arguments against (or for) removing sorting of the keys<br>
before pretty_printing.<br>
<br>
If you care about the above subject, please have your voice heard in<br>
above issue.<br>
<br>
Thanks,<br>
--<br>
Matthias<br>
______________________________<wbr>_________________<br>
IPython-dev mailing list<br>
<a>[email protected]</a><br>
<a href=3D"https://mail.python.org/mailman/listinfo/ipython-dev" target=3D"=
_blank">https://mail.python.org/mailma<wbr>n/listinfo/ipython-dev</a><br>
</blockquote></div>
______________________________<wbr>_________________<br>
IPython-dev mailing list<br>
<a>[email protected]</a><br>
<a href=3D"https://mail.python.org/mailman/listinfo/ipython-dev" rel=3D"nor=
eferrer" target=3D"_blank">https://mail.python.org/mailma<wbr>n/listinfo/ip=
ython-dev</a><br>
</blockquote></div>
</div></div><br>______________________________<wbr>_________________<br>
IPython-dev mailing list<br>
<a>[email protected]</a><br>
<a href=3D"https://mail.python.org/mailman/listinfo/ipython-dev" rel=3D"nor=
eferrer" target=3D"_blank">https://mail.python.org/mailma<wbr>n/listinfo/ip=
ython-dev</a><br>
<br></blockquote></div><br></div>
</blockquote></div>
</div></blockquote><blockquote type=3D"cite"><div><span>___________________=
___________<wbr>_________________</span><br><span>IPython-dev mailing list<=
/span><br><span><a href=3D"mailto:[email protected]" target=3D"_blank"=
>[email protected]</a></span><br><span><a href=3D"https://mail.python.=
org/mailman/listinfo/ipython-dev" target=3D"_blank">https://mail.python.org=
/<wbr>mailman/listinfo/ipython-dev</a></span><br></div></blockquote></div><=
/div></div><br>______________________________<wbr>_________________<br>
IPython-dev mailing list<br>
<a href=3D"mailto:[email protected]">[email protected]</a><br>
<a href=3D"https://mail.python.org/mailman/listinfo/ipython-dev" rel=3D"nor=
eferrer" target=3D"_blank">https://mail.python.org/<wbr>mailman/listinfo/ip=
ython-dev</a><br>
<br></blockquote></div><br></div>

--001a114cad4c6652740555f19767--

--===============9116516357764202608==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
IPython-dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/ipython-dev

--===============9116516357764202608==--