Próbuję dokończyć wybór według atrybutu w Pythonie, ale na podstawie zapytania, czy atrybut jest obecny na liście.
Takie zapytanie w najprostszej formie powinno być takie:
qry = " \"OBJECTID\" in oid_list"
arcpy.SelectLayersByAttribute_management(inft, "NEW_SELECTION", qry)
ale to podejście zwraca nieprawidłowy błąd wyrażenia.
W przeszłości musiałem używać bardziej skomplikowanej sytax dla tego typu zapytań, takich jak:
sqlQuery2 = "nid in (" + ','.join(["'"+x+"'" for x in delta_list]) +")"
ale adaptacja tego fragmentu też nie wydaje mi się działać, tj .:
"OBJECTID_1 in (" + ','.join(["'"+str(x)+"'" for x in oid_list]) +")"
Czego tu brakuje?
Oto nieco zmodyfikowana wersja funkcji w tej odpowiedzi , aby zaakceptować listę Python zamiast łańcucha rozdzielanego średnikami:
źródło
Myślę, że najprostszym podejściem do tego jest iteracja pojedynczych wartości na liście i dodanie ich do zaznaczenia (aby można było zmienić zapytanie przy każdej wartości na liście). Coś takiego:
Możesz użyć ADD_TO_SELECTION, nawet jeśli nie wybrano żadnych funkcji, utworzy nowy wybór przy pierwszej iteracji.
Edytować:
Jeśli uważasz, że koszt wykonania pojedynczego SelectLayerByAttribute będzie zbyt wysoki, możesz zastosować takie podejście, w którym tworzysz dość dużą klauzulę wyboru w zależności od długości listy:
źródło