On Fri, Jul 31, 2020 at 7:59 PM Steven D'Aprano <steve@pearwood.info> wrote:
On Fri, Jul 31, 2020 at 04:08:43PM -0700, Guido van Rossum wrote:
> I'm guessing that indexing by 0, if it were possible, would be a convenient
> idiom to implement the "first item" operation that has been requested
> numerous times (at least for dicts).

Indeed, that seems to be the only use-case which seems to be even
remotely common. `dict.popitem` would do it, of course, but it also
mutates the dict.

The other simple solution is `next(iter(mydict.items()))`.

That one always makes me uncomfortable, because the StopIteration it raises when the dict is empty might be misinterpreted. Basically I never want to call next() unless there's a try...except StopIteration: around it, and that makes this a lot less simple.
The bottom line here seems to me, as far as I can tell, is that being
able to fetch a key and/or value by index is of only marginal use.

> Slicing would be useful to get the
> first N items of a huge dict without materializing the full list of items
> as a list object, which brought Chris B to request this in the first place.

The first request in this thread was from Hans:


He is using a dict to hold an array of columns indexed by name
`{column_name: column}` and wanted to re-order and insert columns at
arbitrary positions.

A bare dict is just not the data structure for that problem.

--Guido van Rossum (python.org/~guido)