I had actually managed to miss collections.defaultdict! I'd like to instead propose that a reference to that be added to the dict.setdefault docs. I can't imagine I'm the only one that has missed this. Date: Fri, 2 Nov 2018 12:12:45 +1100
From: Chris Angelico
To: python-ideas Subject: Re: [Python-ideas] dict.setdefault_call(), or API variations thereupon Message-ID: < CAPTjJmqg_qtK3OfR+4VAaaNa7JXjHjHLpnx6EfEZX5n4tttqCQ@mail.gmail.com> Content-Type: text/plain; charset="UTF-8" On Fri, Nov 2, 2018 at 12:07 PM Alex Shafer
wrote: Other APIs I've considered for this are a new keyword argument to the existing `setdefault()`, or perhaps more radically for Python, a new keyword argument to the `dict()` constructor that would get called as an implicit default for `setdefault()` and perhaps used in other scenarios (essentially defining a type for dict values).
The time machine has been put to good use here. Are you aware of __missing__ and collections.defaultdict? You just create a defaultdict with a callable (very common to use a class like "list"), and any time you try to use something that's missing, it'll call that to generate a value.
from collections import defaultdict d = defaultdict(list) for category, item in some_stuff: d[category].append(item)
Easy way to group things into their categories.
ChrisA