No se puede usar itemsen su lugar iteritemsen 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 iteritemspara la iteración. La 2to3herramienta puede reemplazarlo itemssi alguna vez decide actualizar a Python 3.
iteritemses 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?