Is there a way to efficiently iterate over the values/items in a dictionary that works in both Python 2 and Python 3?
In Python 2, I can write
for x in mydict:
for x in mydict.iterkeys():
for x in mydict.viewkeys():
for x in mydict.itervalues():
for x in mydict.viewvalues():
for x in mydict.iteritems():
for x in mydict.viewitems():
and in Python 3, I have the following possibilities:
for x in mydict:
for x in mydict.keys():
for x in mydict.values():
for x in mydict.items():
So, I can iterate over the keys with for x in mydict, and that works in both Python 2 and 3. But is there a way to iterate over values and key-value pairs (‘items’) that works universally? I need it for writing Python code that can be run in both Python versions.
(On a side note, other obstacles with iterators can be bypassed easily; take for example:
if sys.version_info.major<3:
from itertools import izip as zip, imap as map
However, the dictionary methods cannot be redefined easily like map and zip.)
Any ideas?
values() version of Just another dunce’s answer
or
This is pretty crappy though. You could check the python version and instead of returning the generator, return
d.items()ord.iteritems()as appropriateI think a better question may be how to write Python2 code that works well with 2to3 and generates good Python3 code