J'essaie de terminer une sélection par attribut en Python mais en me basant sur la question de savoir si un attribut est présent dans une liste.
Une telle requête dans sa forme la plus simple devrait ressembler à ceci:
qry = " \"OBJECTID\" in oid_list"
arcpy.SelectLayersByAttribute_management(inft, "NEW_SELECTION", qry)
mais cette approche renvoie une erreur d'expression non valide.
Dans le passé, j'ai dû utiliser une syntaxe plus compliquée pour ce type de requête, comme:
sqlQuery2 = "nid in (" + ','.join(["'"+x+"'" for x in delta_list]) +")"
mais une adaptation de cet extrait ne semble pas non plus fonctionner pour moi, c'est-à-dire:
"OBJECTID_1 in (" + ','.join(["'"+str(x)+"'" for x in oid_list]) +")"
Qu'est-ce que j'oublie ici?
Voici une version légèrement modifiée de la fonction dans cette réponse , pour accepter une liste Python au lieu d'une chaîne délimitée par des points-virgules:
la source
Je pense que l'approche la plus simple consiste à parcourir les valeurs de votre liste individuellement et à les ajouter à la sélection (vous pouvez donc modifier votre requête avec chaque valeur de la liste). Quelque chose comme ça:
Vous pouvez utiliser ADD_TO_SELECTION même si aucune fonction n'est sélectionnée, il créera une nouvelle sélection à la première itération.
Éditer:
Si vous pensez que le coût de la réalisation de SelectLayerByAttribute individuel sera trop élevé, vous pouvez utiliser une approche comme celle-ci où vous créez une clause de sélection assez importante en fonction de la longueur de votre liste:
la source