En primer lugar, ¿qué estoy tratando de hacer?
Estoy construyendo una secuencia de comandos de Python que debe ser llamado desde un ArcMap 10.0 cuadro de herramientas. Este secuencias de comandos utiliza (entre otros insumos) de los datos contenidos en la enorme gdb tablas. Procesa los datos de muchas maneras diferentes (por lo tanto, hay muchas inevitable iteraciones en la tabla).
Por qué iba yo a querer convertir los datos?
La razón por la que me estoy convirtiendo las tablas a ditionaries es que es muy lento para iterar a través de la tabla mediante SearchCursor. Tengo muchas operaciones que quiero hacer en mis datos y es mucho más sencillo y rápido para el uso de estructuras de datos existentes.
¿Cómo lo estoy haciendo?
La forma habitual de utilizar gdb tablas en Python (y a la que los he comparado mi método) es algo a lo largo de las líneas de:
# Create a search cursor
rows = arcpy.SearchCursor(table)
for row in rows:
(...)
Lo que yo estoy haciendo en lugar de eso, es que yo soy de convertir la tabla a dbf usando TableToTable_conversion (tirar algunas inútil columnas/filas en el camino). Entonces puedo convertir esta tabla DBF a un diccionario (me fue inspirado por un código, escrito por Tyrtamos, si buscas en google "Conferencia d'un archivo de dbase III" usted debe encontrar). En fin, tengo un diccionario que contiene las listas de datos indexados con los nombres de columna. Y estoy muy feliz porque puedo hacer muchas cosas con ella de forma relativamente rápida.
Por último,...
Este método parece ser mucho más rápido. Sin embargo, soy nuevo en el juego y tengo miedo de estar perdiendo algo porque no entiendo todo lo que está pasando. Es una mala idea para hacer eso? ¿Hay razones para no hacerlo distinto potencial desbordamiento de memoria?
Por favor, dime si algo no está claro. Gracias!
EDITAR
Después de ver tus respuestas, me doy cuenta de que no era uno muy importante la información que falta: estoy usando Arcmap 10.0.
Tengo ejecutar pruebas de rendimiento utilizando nmpeterson de la solución, la modificación de un par de líneas para hacer que el código sea compatible con ArcGIS 10.0
cursor = arcpy.SearchCursor(fc, cursor_fields)
for row in cursor:
rowList = []
for field in cursor_fields:
rowList.append(row.getValue(field))
attr_dict[rowList[0]] = dict(zip(cursor_fields, rowList))
En una pequeña tabla que contiene ~15000 filas, me midió un promedio de tiempo transcurrido y consiguió
make_attribute_dict -- 10.7378981873
gdb_to_dbf_to_dict-- 2.56576526461