Добавление значений в массив и получение различных значений с помощью Python - PullRequest
2 голосов
/ 07 октября 2010

У меня есть код Python ниже, который будет перебирать таблицу и выводить значения в определенном столбце.То, что не показано, - это форма, в которой пользователь выбирает векторный слой.После выбора слоя объектов второй выпадающий список заполняется всеми заголовками столбцов для этого объекта, и пользователь выбирает, на каком столбце он хочет сосредоточиться.Теперь в скрипте Python я просто распечатываю каждое значение в этом столбце.Но я хочу сохранить каждое значение в List или Array и получить значения Distinct.Как я могу сделать это в 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)

Ответы [ 2 ]

3 голосов
/ 07 октября 2010

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

>>> 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 имеет только однострочные комментарии, начинающиеся с #.

1 голос
/ 07 октября 2010

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

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