On Mon, Jun 29, 2020 at 11:02:54PM -0700, Christopher Barker wrote:
So dict.items isn't subscriptable because it's an unordered set, not a sequence.
Or is it a set because it can’t be indexed? If I have the history right, dict.items was first implemented with the “old” dict implementation, which did not preserve order, but did provide O(1) access, so making the dict views set-like was easy, and making them Sequences was impossible.
No, making them set-like was intentional.
The history goes something like this:
In Python 1, and early Python 2, dict.keys(), .values() and .items() each returned lists. Some time by 2.4 (possibly earlier) dicts grew additional methods returning iterators:
dict.iterkeys() .itervalues() .iteritems()
As part of the migration from Python 2 to 3, it was planned to change them to set-like views:
https://www.python.org/dev/peps/pep-3106/
so as an aid to migration, these set-like views were added to 2.7:
dict.viewkeys() .viewvalues() .viewitems()
and finally in 3.x, the list and iterator versions were all dropped and the views were renamed.
So there was already a sequence version of items etc, and the set-like views were explicitly intended to be set-like.