public inbox for [email protected]  
help / color / mirror / Atom feed
From: Karsten Hilbert <[email protected]>
To: [email protected]
Subject: Re: iterating over DictRow
Date: Fri, 25 Sep 2020 23:16:35 +0200
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
References: <[email protected]>
	<AM0PR07MB4036EA8B58205084F30DA2AC87390@AM0PR07MB4036.eurprd07.prod.outlook.com>
	<[email protected]>
	<[email protected]>
	<[email protected]>
	<[email protected]>

On Fri, Sep 25, 2020 at 09:06:43AM -0700, Adrian Klaver wrote:

> > In py2 one *had* to do DictRow.keys() to iterate over the
> > keys. In py3
> >
> > 	for key in DictRow:
> >
> > is the suggested idiom for that which, however, iterates over
> > DictRow as a list (as it always did).
> >
> > DictRow.keys() still exists on dicts in py3 (and is not
> > deprec(i?)ated to my knowledge) but now returns a memoryview
> > (dict_keys, that is) rather than a list, which brings with it
> > its own set of issues (dict and keys "list" are not
> > independant objects anymore).
> >
> > So, neither using py2's
> >
> > 	for key in DictRow.keys():
> >
> > under py3 nor changing to py3's
> >
> > 	for key in DictRow:			# beep: variable wrongly named
> >
> > leads to fully equivalent code. So this is a py2/py3 Gotcha
> > in psycopg2.
>
> Well you can do, borrowing from previous example:
>
> for ky in r0._index:
>     print(ky)
>
> for ky in r0._index:
>     print(r0[ky])
>
> Where _index is a substitute for *.keys().

Sure, there's a number of solutions to my immediate problem,
the fitting of which is

	for key in dict(DictRow):

That's the best fit because my

	def _escape_dict(the_dict, ...):

was inaptly named. It should have been (and now is)

	def _escape_dict_like(dict_like, ...):

within which

	dict(dict_like)

is quite the thing to do despite having to make something a
duck which already nearly quacks like one is somehwat
unfortunate.

Karsten
--
GPG  40BE 5B0E C98E 1713 AFA6  5BC0 3BEA AC80 7D4F C89B





view thread (12+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected]
  Subject: Re: iterating over DictRow
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox