No se puede usar items
en su lugar iteritems
en todos los lugares de Python. Por ejemplo, el siguiente código:
class C:
def __init__(self, a):
self.a = a
def __iter__(self):
return self.a.iteritems()
>>> c = C(dict(a=1, b=2, c=3))
>>> [v for v in c]
[('a', 1), ('c', 3), ('b', 2)]
se romperá si usas items
:
class D:
def __init__(self, a):
self.a = a
def __iter__(self):
return self.a.items()
>>> d = D(dict(a=1, b=2, c=3))
>>> [v for v in d]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __iter__ returned non-iterator of type 'list'
Lo mismo es cierto para viewitems , que está disponible en Python 3.
Además, dado que los elementos devuelven una copia de la lista de (key, value)
pares del diccionario , es menos eficiente, a menos que desee crear una copia de todos modos.
En Python 2, es mejor usarlo iteritems
para la iteración. La 2to3
herramienta puede reemplazarlo items
si alguna vez decide actualizar a Python 3.
iteritems
es un iterador, por eso es tan útil. Casi nunca quiero iterar sobre un diccionario como una lista. Entonces, ¿cuál es la forma correcta de iterar sobre el diccionario con algo generador como de una manera que sea compatible con Python 2 y 3?