Pole automatycznego inkrementacji na podstawie grup w klasie obiektów?

10

Chcę automatycznie zwiększyć pole w oparciu o grupy w klasie obiektów. Mam 8 wykresów w obrębie danego wielokąta i muszę przypisać im identyfikator od 1-8 dla każdego zestawu wykresów w każdym wielokącie. Wielokąt miałby swój własny unikalny numer identyfikacyjny, który posłużyłby do grupowania wykresów.

Zakładam, że byłaby to zmiana tego:

rec=0
def autoIncrement():
 global rec
 pStart = 1 
 pInterval = 1 
 if (rec == 0): 
  rec = pStart 
 else: 
  rec = rec + pInterval 
 return rec
Becks
źródło
1
Prawdopodobnie chcesz poczytać o użyciu operatora modułu Python ( %)
Vince

Odpowiedzi:

12

Kalkulator polowy dla Pythona

d={}
def GroupOrder(groupID):
  if groupID in d: d[groupID]+=1
  else: d[groupID]=1
  return d[groupID]

---------------------------

GroupOrder( !locality! )

Zmień! Miejscowość! do odpowiedniego pola.

AKTUALIZACJA: Ta odmiana wypowiedzi:

d={}
def GroupOrder(groupID):
  N=d.get(groupID,0);N+=1
  d[groupID]=N
  return N

Powinien działać znacznie szybciej na dużych zestawach danych.

FelixIP
źródło
Jeśli funkcja GroupOrder miałaby być używana w autonomicznym skrypcie python, GroupOrderfunkcja byłaby code blockargumentem, a argumentem GroupOrder( !locality! )„wyrażenie”.
user3467260
W skrypcie jest to: a) tworzenie słownika b) aktualizacja kursora na grupie 2 pól i jednym do wypełnienia. 3-5 linii kodu.
FelixIP
1
W swoim komentarzu zapomniałem wspomnieć, że argumenty te zostaną uwzględnione w narzędziu Arcpy Oblicz pole: arcpy.CalculateField_management(inTable, fieldName, expression, "PYTHON_9.3", codeblock)jeśli zostaną użyte w samodzielnym skrypcie. Dziękujemy za opisanie kroków innego podejścia do używania kodu w skrypcie autonomicznym.
user3467260
Wszystko dobrze. W każdym razie mam wrażenie, że kursor da jest znacznie szybszy niż kalkulator polowy.
FelixIP