[Python-ideas] Add dict.append and dict.extend
mertz at gnosis.cx
Mon Jun 4 19:04:06 EDT 2018
I don't think I'd ever guess the intended semantics from the names in a
million years. They seem like horribly misnamed methods, made worse by the
false suggestion of similarity to list operations.
In 20 years of using Python, moreover, I don't think I've ever wanted the
described behavior under any spelling.
On Mon, Jun 4, 2018, 6:58 PM George Leslie-Waksman <waksman at gmail.com>
> Semantically, I'm not sure append and extend would be universally
> understood to mean don't overwrite.
> This can be accomplished with a custom subclass for your use case:
> import collections
> class OverwriteGuardedDict(collections.UserDict):
> def append(self, key, value):
> if key in self.data:
> raise KeyError(key)
> self.data[key] = value
> def extend(self, other):
> overlap = self.data.keys() & other.keys()
> if overlap:
> raise KeyError(','.join(overlap))
> On Mon, Jun 4, 2018 at 2:24 PM Ben Rudiak-Gould <benrudiak at gmail.com>
>> I'd like to propose adding `append` and `extend` methods to dicts
>> which behave like `__setitem__` and `update` respectively, except that
>> they raise an exception (KeyError?) instead of overwriting preexisting
>> Very often I expect that the key I'm adding to a dict isn't already in
>> it. If I want to verify that, I have to expand my single-line
>> assignment statement to 3-5 lines (depending on whether the dict and
>> key are expressions that I now need to assign to local variables). If
>> I don't verify it, I may overwrite a dict entry and produce silently
>> wrong output.
>> The names `append` and `extend` make sense now that dicts are defined
>> to preserve insertion order: they try to append the new entries, and
>> if that can't be done because it would duplicate a key, they raise an
>> In case of error, `extend` should probably leave successfully appended
>> entries in the dict, since that's consistent with list.extend and
>> The same methods would also be useful on sets. Unfortunately, the
>> names make less sense.
>> -- Ben
>> Python-ideas mailing list
>> Python-ideas at python.org
>> Code of Conduct: http://python.org/psf/codeofconduct/
> Python-ideas mailing list
> Python-ideas at python.org
> Code of Conduct: http://python.org/psf/codeofconduct/
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Python-ideas