values keys dictionaries create python dictionary

python - keys - Error: "el objeto ''dict'' no tiene el atributo ''iteritems''"



python dictionary of dictionaries (6)

Como estás en python3, usa dict.items() lugar de dict.iteritems()

iteritems() se eliminó en python3, por lo que ya no puede usar este método.

Eche un vistazo a la sección Cambios incorporados en Python 3.0 Wiki, donde se indica:

Se eliminaron dict.iteritems() , dict.iterkeys() y dict.itervalues() .

En su lugar: use dict.items() , dict.keys() y dict.values() respectivamente.

Estoy tratando de usar NetworkX para leer un Shapefile y usar la función write_shp() para generar los Shapefiles que contendrán los nodos y los bordes, pero cuando intento ejecutar el código me da el siguiente error:

Traceback (most recent call last): File "C:/Users/Felipe/PycharmProjects/untitled/asdf.py", line 4, in <module> nx.write_shp(redVial, "shapefiles") File "C:/Python34/lib/site-packages/networkx/readwrite/nx_shp.py", line 192, in write_shp for key, data in e[2].iteritems(): AttributeError: ''dict'' object has no attribute ''iteritems''

Estoy usando Python 3.4 e instalé NetworkX a través de la instalación de pip.

Antes de este error, ya me había dado otro que decía "xrange no existe" o algo así, así que lo busqué y simplemente cambié xrange a range en el archivo nx_shp.py, que pareció resolverlo.

Por lo que he leído, podría estar relacionado con la versión de Python (Python2 vs Python3).


Como respondió RafaelC, Python 3 renombró dict.iteritems -> dict.items. Pruebe con una versión de paquete diferente. Esto enumerará los paquetes disponibles:

try: iteritems except NameError: iteritems = items

Luego vuelva a ejecutar con la versión que intentará después de == para instalar / cambiar la versión


El propósito de .iteritems() era usar menos espacio de memoria produciendo un resultado a la vez durante el bucle. No estoy seguro de por qué la versión de Python 3 no admite iteritems() aunque se ha demostrado que es eficiente que .items()

Si desea incluir un código que sea compatible con PY versión 2 y 3,

python -m pip install yourOwnPackageHere==

Esto puede ayudar si implementa su proyecto en otro sistema y no está seguro de la versión PY.


En Python2 , teníamos .items() y .iteritems() en los diccionarios. dict.items() devolvió la lista de tuplas en el diccionario [(k1,v1),(k2,v2),...] . Copió todas las tuplas en el diccionario y creó una nueva lista. Si el diccionario es muy grande, hay un gran impacto en la memoria.

Entonces crearon dict.iteritems() en versiones posteriores de Python2. Esto devolvió el objeto iterador. No se copió todo el diccionario, por lo que hay un menor consumo de memoria. A las personas que usan Python2 les enseña a usar dict.iteritems() lugar de .items() para mayor eficiencia como se explica en el siguiente código.

import timeit d = {i:i*2 for i in xrange(10000000)} start = timeit.default_timer() for key,value in d.items(): tmp = key + value #do something like print t1 = timeit.default_timer() - start start = timeit.default_timer() for key,value in d.iteritems(): tmp = key + value t2 = timeit.default_timer() - start

Salida:

Time with d.items(): 9.04773592949 Time with d.iteritems(): 2.17707300186

En Python3 , querían hacerlo más eficiente, por lo que movieron dictionary.iteritems() a dict.items() y eliminaron .iteritems() ya que ya no era necesario.

Ha utilizado dict.iteritems() en Python3 por lo que ha fallado. Intente usar dict.items() que tiene la misma funcionalidad que dict.iteritems() de Python2 . Este es un pequeño problema de migración de Python2 a Python3 .


En Python2, dictionary.iteritems() es más eficiente que dictionary.items() por lo que en Python3, la funcionalidad de dictionary.iteritems() se ha migrado a dictionary.items() y se iteritems() . Entonces estás recibiendo este error.

Use dict.items() en Python3, que es lo mismo que dict.iteritems() de Python2.


Tuve un problema similar (usando 3.5) y perdí 1/2 día, pero aquí hay algo que funciona: estoy retirado y solo estoy aprendiendo Python para poder ayudar a mi nieto (12) con él.

mydict2={''Atlanta'':78,''Macon'':85,''Savannah'':72} maxval=(max(mydict2.values())) print(maxval) mykey=[key for key,value in mydict2.items()if value==maxval][0] print(mykey) YEILDS; 85 Macon