At the beginning of this thread, Ian Kelly said: Not with defaultdict, but you can subclass dict and provide a __missing__ method directly
To emphasize, you don't need to subclass "defaultdict" -- you need only subclass "dict" itself: class MyDict(dict): def __missing__(self, key): self[key] = key return key md = MyDict() md[1] = 111 _ = md[2] _ = md["another key"] ## md now looks like this: {1: 111, 2: 2, 'another key': 'another key'} The defaultdict documentation is confusing on this point. A *long* time ago, I filed Bug 9536 to improve the doc, but the fix hasn't bubbled to the surface yet. -- https://mail.python.org/mailman/listinfo/python-list