<div dir="ltr">Would it shut down this particular subthread if (as the language's designer, if not its BDFL) I declared that this was an explicit design decision that I made nearly 30 years ago? I should perhaps blog about the background of this decision, but it was quite a conscious one. There really is no point in thinking that this is an accident of implementation or could be changed.<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Mar 6, 2019 at 9:10 AM Jonathan Fine <<a href="mailto:jfine2358@gmail.com">jfine2358@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">SUMMARY: The outcome of a search for: python dict literal duplicate<br>
keys. No conclusions (so far).<br>
<br>
BACKGROUND<br>
In the thread  "PEP: Dict addition and subtraction" I wrote<br>
<br>
>     >>>  {'a': 0, 'a': 1}<br>
>     {'a': 1}<br>
<br>
> I wonder, is this behaviour of {'a': 0, 'a': 1} documented (or tested)<br>
> anywhere? I didn't find it in these URLs:<br>
> <a href="https://docs.python.org/3/library/stdtypes.html#mapping-types-dict" rel="noreferrer" target="_blank">https://docs.python.org/3/library/stdtypes.html#mapping-types-dict</a><br>
> <a href="https://docs.python.org/3/tutorial/datastructures.html#dictionaries" rel="noreferrer" target="_blank">https://docs.python.org/3/tutorial/datastructures.html#dictionaries</a><br>
<br>
LINKS<br>
I've since found some relevant URLs.<br>
<br>
[1] <a href="https://stackoverflow.com/questions/34539772/is-a-dict-literal-containing-repeated-keys-well-defined" rel="noreferrer" target="_blank">https://stackoverflow.com/questions/34539772/is-a-dict-literal-containing-repeated-keys-well-defined</a><br>
[2] <a href="https://help.semmle.com/wiki/display/PYTHON/Duplicate+key+in+dict+literal" rel="noreferrer" target="_blank">https://help.semmle.com/wiki/display/PYTHON/Duplicate+key+in+dict+literal</a><br>
[3] <a href="https://bugs.python.org/issue26910" rel="noreferrer" target="_blank">https://bugs.python.org/issue26910</a><br>
[4] <a href="https://bugs.python.org/issue16385" rel="noreferrer" target="_blank">https://bugs.python.org/issue16385</a><br>
[5] <a href="https://realpython.com/python-dicts/" rel="noreferrer" target="_blank">https://realpython.com/python-dicts/</a><br>
<br>
ANALYSIS<br>
[1] gives a reference to [6], which correctly states the behaviour of<br>
{'a':0, 'a':1}, although without giving an example. (Aside: Sometimes<br>
one example is worth 50 or more words.)<br>
<br>
[2] is from Semmle, who provide an automated code review tool, called<br>
LGTM. The page [2] appears to be part of the documentation for LGTM.<br>
This page provides a useful link to [7].<br>
<br>
[3] is a re-opening of [4]. It was rapidly closed by David Murray, who<br>
recommended reopening the discussion on python-ideas.<br>
[4] was raised by Albert Ferras, based on his real-world experience.<br>
In particular, a configuration file that contains a long dict literal.<br>
This was closed by Benjamin Peterson, who said that raising an error<br>
was "out of the question for compatibility isssues". Given few use<br>
case and little support on python-ideas,Terry Ready supported the<br>
closure. Raymond Hettinger supported the closure.<br>
<br>
[5] is from RealPython, who provide online tutorials. This page<br>
contains the statement "a given key can appear in a dictionary only<br>
once. Duplicate keys are not allowed." Note that<br>
    {'a': 0, 'a': 1}<br>
can reasonably be thought of as a dictionary with duplicate keys.<br>
<br>
NOTE<br>
As I recall SGML (this shows my age) allows multiple entity declarations, as in<br>
    <!ENTITY key "original"><br>
    <!ENTITY key "updated"><br>
<br>
And as I recall, in SGML the first value "original" is the one that is<br>
in effect. This is what happens with the LaTeX command<br>
\providecommand.<br>
<br>
FURTHER LINKS<br>
[6] <a href="https://docs.python.org/3/reference/expressions.html#dictionary-displays" rel="noreferrer" target="_blank">https://docs.python.org/3/reference/expressions.html#dictionary-displays</a><br>
[7] <a href="https://cwe.mitre.org/data/definitions/561.html" rel="noreferrer" target="_blank">https://cwe.mitre.org/data/definitions/561.html</a> # CWE-561: Dead Code<br>
<br>
-- <br>
Jonathan<br>
_______________________________________________<br>
Python-ideas mailing list<br>
<a href="mailto:Python-ideas@python.org" target="_blank">Python-ideas@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-ideas" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/python-ideas</a><br>
Code of Conduct: <a href="http://python.org/psf/codeofconduct/" rel="noreferrer" target="_blank">http://python.org/psf/codeofconduct/</a><br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature">--Guido van Rossum (<a href="http://python.org/~guido" target="_blank">python.org/~guido</a>)</div>