2010-10-07 1 views
2

У меня есть код python ниже, который будет проходить через таблицу и распечатывать значения в определенном столбце. То, что не показано, - это форма, в которой пользователь выбирает слой функций. После выбора Feature Layer вторая Dropdown заполняется всеми заголовками столбцов для этой функции, и пользователь выбирает, в какой колонке они хотят сосредоточиться. Теперь в скрипте python я просто распечатываю каждое значение внутри этого столбца. Но я хочу сохранить каждое значение в списке или массиве и получить отличительные значения. Как я могу это сделать в Python?Добавление значений в массив и получение различных значений с использованием Python

Также есть более эффективный способ прокрутки таблицы, чем идти по строкам? По некоторым причинам это очень медленно.

большое спасибо

# 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) 

ответ

3

Вы можете хранить различные значения в наборе:

>>> 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} 

Также вы можете сделать ваш цикл более вещим, хотя я не знаю, почему вы перебираете строки начать с (при условии, что вы не используете его):

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

И кстати, """ text """ является не комментарий. Python имеет только однострочные комментарии, начиная с #.

+0

Айе. Используйте 'set', и все будет готово. +1. –

+0

Привет, я изменил свой код, чтобы отразить ваши настройки, и я получаю сообщение об ошибке. Вы видите какие-либо проблемы с ним выше? Кроме того, я оставил набор() до тех пор, пока не получу цикл – Josh

+0

. Что мне было интересно (а), почему вы перебираете строку «row», (b) какие «поля» (так как вы не определяли ее в показанный код, но я догадался, что он пришел откуда-то еще), и (c) у вас могут возникнуть проблемы сейчас, когда вы дважды вызываете 'searchcursor'; возможно, что это конфликтует, поэтому лучше удалить первый звонок. – poke

1

Один из способов получить различные значения, чтобы использовать набор, чтобы увидеть, если вы видели значение уже, и отображать его только тогда, когда это новое значение:

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)