04.03.19 21:24, Guido van Rossum пише:
* Dicts are not like sets because the ordering operators (<, <=, >, >=)
are not defined on dicts, but they implement subset comparisons for
sets. I think this is another argument pleading against | as the
operator to combine two dicts.
Well, I suppose that the next proposition will be to implement the
ordering operators for dicts. Because why not? Lists and numbers support
them. /sarcasm/
Jokes aside, dicts have more common with sets than with sequences. Both
can not contain duplicated keys/elements. Both have the constant
computational complexity of the containment test. For both the size of
the merging/unioning can be less than the sum of sizes of original
containers. Both have the same restrictions for keys/elements (hashability).
* Regarding how to construct the new set in __add__, I now think this
should be done like this:
class dict:
<other methods>
def __add__(self, other):
<checks that other makes sense, else return NotImplemented>
new = self.copy() # A subclass may or may not choose to override
new.update(other)
return new
AFAICT this will give the expected result for defaultdict -- it keeps
the default factory from the left operand (i.e., self).
No one builtin type that implements __add__ uses the copy() method. Dict
would be the only exception from the general rule.
And it would be much less efficient than {**d1, **d2}.
* Regarding how often this is needed, we know that this is proposed and
discussed at length every few years, so I think this will fill a real need.
And every time this proposition was rejected. What has been changed
since it was rejected the last time? We now have the expression form of
dict merging ({**d1, **d2}), this should be decrease the need of the
plus operator for dicts.
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/