2010-10-07 7 views
2

J'ai un code python ci-dessous qui va parcourir une table et imprimer des valeurs dans une colonne particulière. Ce qui n'est pas affiché est la forme dans laquelle l'utilisateur sélectionne une couche d'entités. Une fois la couche d'entités sélectionnée, une seconde liste déroulante est remplie avec tous les en-têtes de colonne pour cette fonctionnalité et l'utilisateur choisit la colonne sur laquelle il souhaite se concentrer. Maintenant, dans le script python, j'imprime simplement chaque valeur dans cette colonne. Mais je veux stocker chaque valeur dans une liste ou un tableau et obtenir des valeurs distinctes. Comment puis-je faire cela en Python?Ajouter des valeurs à un tableau et obtenir des valeurs distinctes en utilisant Python

Y a-t-il aussi un moyen plus efficace de faire une boucle dans la table plutôt que d'aller ligne par ligne? C'est très lent pour une raison quelconque.

merci beaucoup

# Import system modules 
import sys, string, os, arcgisscripting 

# Create the Geoprocessor object 
gp = arcgisscripting.create(9.3) 
gp.AddToolbox("E:/Program Files (x86)/ArcGIS/ArcToolbox/Toolboxes/Data Management Tools.tbx") 

# Declare our user input args 
input_dataset = sys.argv[1] #This is the Feature Layer the User wants to Query against 
Atts = sys.argv[2]   #This is the Column Name The User Selected 

#Lets Loop through the rows to get values from a particular column   

fc = input_dataset 

gp.AddMessage(Atts) 

rows = gp.searchcursor(fc) 
row = rows.next() 
NewList = [] 

for row in gp.SearchCursor(fc): 
    ##grab field values 
    fcValue = fields.getvalue(Atts) 
    NewList.add(fcValue) 

Répondre

3

Vous pouvez stocker des valeurs distinctes dans un ensemble:

>>> a = [ 1, 2, 3, 1, 5, 3, 2, 1, 5, 4 ] 
>>> b = set(a) 
>>> b 
{1, 2, 3, 4, 5} 
>>> b.add(5) 
>>> b 
{1, 2, 3, 4, 5} 
>>> b.add(6) 
>>> b 
{1, 2, 3, 4, 5, 6} 

vous pouvez également faire votre boucle plus pythonique, bien que je ne sais pas pourquoi vous en boucle sur la ligne pour commencer (étant donné que vous ne l'utilisez pas):

for row in gp.searchcursor(fc): 
    ##grab field values 
    fcValue = fields.getvalue(Atts) 
    gp.AddMessage(fcValue) 

Et BTW, """ text """ est pas un commentaire. Python a seulement des commentaires de ligne commençant par #.

+0

Aye. Utilisez 'set' et vous serez tous ensemble. +1 –

+0

Salut poke, j'ai changé mon code pour refléter vos réglages et j'ai une erreur. Voyez-vous des problèmes avec cela ci-dessus? J'ai aussi omis le set() pour le moment jusqu'à ce que la boucle fonctionne – Josh

+0

Ce que je me demandais c'est (a) pourquoi vous itérez sur 'row', (b) ce que' fields' est (comme vous ne l'avez pas défini dans le code montré, mais je l'ai deviné est venu d'ailleurs) et (c) vous pourriez avoir des problèmes maintenant que vous appelez 'searchcursor' deux fois; il est possible que cela soit en conflit, il vaut donc mieux retirer le premier appel. – poke

1

Une façon d'obtenir des valeurs distinctes est d'utiliser un ensemble pour voir si vous avez vu la valeur déjà, et l'afficher uniquement quand il est une nouvelle valeur:

fcValues = set() 
for row in gp.searchcursor(fc): 
    ##grab field values 
    fcValue = fields.getvalue(Atts) 
    if fcValue not in fcValues: 
     gp.AddMessage(fcValue) 
    fcValues.add(fcValue) 
Questions connexes