Estoy tratando de completar una selección por atributo en Python, pero en función de la consulta de si un atributo está presente en una lista.
Tal consulta en su forma más simple debería ser algo como esto:
qry = " \"OBJECTID\" in oid_list"
arcpy.SelectLayersByAttribute_management(inft, "NEW_SELECTION", qry)
pero ese enfoque devuelve un error de expresión no válida.
En el pasado, tuve que usar una sintaxis más complicada para este tipo de consulta, como por ejemplo:
sqlQuery2 = "nid in (" + ','.join(["'"+x+"'" for x in delta_list]) +")"
pero una adaptación de este fragmento tampoco parece funcionar para mí, es decir:
"OBJECTID_1 in (" + ','.join(["'"+str(x)+"'" for x in oid_list]) +")"
¿Que me estoy perdiendo aqui?
Aquí hay una versión ligeramente modificada de la función en esta respuesta , para aceptar una lista de Python en lugar de una cadena delimitada por punto y coma:
fuente
Creo que el enfoque más directo para esto es iterar a través de los valores en su lista de manera singular y agregarlos a la selección (para que pueda cambiar su consulta con cada valor en la lista). Algo como esto:
Puede usar ADD_TO_SELECTION incluso si no hay características seleccionadas, creará una nueva selección en la primera iteración.
Editar:
Si cree que el costo de hacer SelectLayerByAttribute individual será demasiado alto, podría usar un enfoque como este en el que cree una cláusula de selección bastante grande dependiendo de la longitud de su lista:
fuente