¿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
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?for key in some_dict
funciona en ambos, y la2to3
herramienta se traduciráiteritems()
deitems()
todos modos ...for k in d: d[k]
es innecesariamente detallado / antipáticoTal como señaló @Wessie
dict.iteritems
,dict.iterkeys
ydict.itervalues
(que devuelven un iterador en Python2.x) y tambiéndict.viewitems
,dict.viewkeys
ydict.viewvalues
(que devuelven objetos de vista en Python2.x) se eliminaron en Python3.xY
dict.items
,dict.keys
ydict.values
solí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
items
en su lugariteritems
en 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
iteritems
para la iteración. La2to3
herramienta puede reemplazarloitems
si 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