¿Es legítimo usar en items()lugar de iteritems()en todos los lugares? ¿Por qué fue iteritems()eliminado de Python 3? Parece un método excelente y útil. ¿Cuál es el razonamiento detrás de esto?
Editar: para aclarar, quiero saber cuál es el idioma correcto para iterar sobre un diccionario de forma similar a un generador (un elemento a la vez, no todos en la memoria) de una manera que sea compatible con Python 2 y Python 3 ?
fuente

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?for key in some_dictfunciona en ambos, y la2to3herramienta se traduciráiteritems()deitems()todos modos ...for k in d: d[k]es innecesariamente detallado / antipáticoTal como señaló @Wessie
dict.iteritems,dict.iterkeysydict.itervalues(que devuelven un iterador en Python2.x) y tambiéndict.viewitems,dict.viewkeysydict.viewvalues(que devuelven objetos de vista en Python2.x) se eliminaron en Python3.xY
dict.items,dict.keysydict.valuessolía devolver una copia de la lista del diccionario en Python2.x, ahora devuelve objetos de vista en Python3.x, pero todavía no son lo mismo que el iterador .Si desea devolver un iterador en Python3.x, use
iter(dictview):fuente
No se puede usar
itemsen su lugariteritemsen todos los lugares de Python. Por ejemplo, el siguiente código:se romperá si usas
items: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. La2to3herramienta puede reemplazarloitemssi alguna vez decide actualizar a Python 3.fuente
future.utils permite la compatibilidad con python 2 y 3
https://python-future.org/compatible_idioms.html
fuente