On Sun, Dec 27, 2020 at 01:34:02PM +1300, Greg Ewing wrote: > On 27/12/20 10:15 am, Christopher Barker wrote: > >It does seem like ** could be usable with any iterable that returns > >pairs of objects. However the trick is that when you iterate a dict, you > >get the keys, not the items, which makes me think that the only thing > >you should *need* is an items() method that returns an iterable (pf > >pairs of objects). > > It seems to me it would be more fundamental to use iteration to get > the keys and indexing to get the corresponding values. You're only > relying on dunder methods then.
I think if we were designing mapping protocols now, that would be an excellent idea, but we aren't, we have decades of history from `dict` behind us. And protocols from dict use `keys()` and getitem. E.g. update. I think it would be confusing to have dict protocols use keys and double star use items, so I think it would be better to follow the API of dict.update: D.update([E, ]**F) -> None. Update D from dict/iterable E and F. If E is present and has a .keys() method, then does: for k in E: D[k] = E[k] If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v So to have an object E usable with double star dict unpacking, perhaps it needs to either: * have a keys() method which iterates over keys (assumed to all be strings), and `__getitem__`; or * support iteration, yielding (key, value) pairs. -- Steve _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/5VXR3ZDKGF6BQDEGQXELSEKIDVVLPLGG/ Code of Conduct: http://python.org/psf/codeofconduct/