Re: iterating over DictRow
От | Karsten Hilbert |
---|---|
Тема | Re: iterating over DictRow |
Дата | |
Msg-id | 20200925211635.GA1544@hermes.hilbert.loc обсуждение исходный текст |
Ответ на | Re: iterating over DictRow (Adrian Klaver <adrian.klaver@aklaver.com>) |
Ответы |
Re: iterating over DictRow
|
Список | psycopg |
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
В списке psycopg по дате отправления: