Eu estou tentando concluir uma seleção por atributo em Python, mas com base na consulta de se um atributo está presente em uma lista.
Essa consulta, na sua forma mais simples, deve ser algo como isto:
qry = " \"OBJECTID\" in oid_list"
arcpy.SelectLayersByAttribute_management(inft, "NEW_SELECTION", qry)
mas essa abordagem retorna um erro de expressão inválido.
No passado, eu tive que usar sintaxe mais complicada para esse tipo de consulta, como:
sqlQuery2 = "nid in (" + ','.join(["'"+x+"'" for x in delta_list]) +")"
mas uma adaptação desse trecho também não parece funcionar para mim, ou seja:
"OBJECTID_1 in (" + ','.join(["'"+str(x)+"'" for x in oid_list]) +")"
O que estou perdendo aqui?
Aqui está uma versão ligeiramente modificada da função nesta resposta , para aceitar uma lista Python em vez de uma string delimitada por ponto e vírgula:
fonte
Eu acho que a abordagem mais direta é iterar os valores da sua lista de maneira singular e adicioná-los à seleção (para que você possa alterar sua consulta com cada valor da lista). Algo assim:
Você pode usar o ADD_TO_SELECTION mesmo que não haja recursos selecionados, ele criará uma nova seleção na primeira iteração.
Editar:
Se você acha que o custo de executar SelectLayerByAttribute individual é muito alto, você pode usar uma abordagem como essa, onde cria uma cláusula de seleção bastante grande, dependendo do tamanho da sua lista:
fonte