Поле з автоматичним збільшенням на основі груп у класах функцій?


10

Мені потрібно автоматично збільшити поле на основі груп у класі функцій. У мене є 8 ділянок у межах даного багатокутника, і мені потрібно призначити їм ідентифікатор від 1-8 для кожного набору ділянок у кожному полігоні. Полігон матиме свій унікальний ідентифікаційний номер, який використовуватиметься для групування ділянок.

Я припускаю, що це буде зміною цього:

rec=0
def autoIncrement():
 global rec
 pStart = 1 
 pInterval = 1 
 if (rec == 0): 
  rec = pStart 
 else: 
  rec = rec + pInterval 
 return rec

1
Напевно, ви хочете прочитати інформацію про використання оператора модуля Python ( %)
Вінс

Відповіді:


12

Польовий калькулятор для Python

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

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

GroupOrder( !locality! )

Зміни! Місцевість! до відповідної галузі.

ОНОВЛЕННЯ: Цей варіант вираження:

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

Має працювати набагато швидше на великих наборах даних.


Якщо функцію GroupOrder слід було б використовувати в автономному скрипті пітона, GroupOrderфункцією буде code blockаргумент, а аргумент GroupOrder( !locality! )- «вираз».
користувач3467260

У сценарії це: а) створити словник; b) оновити курсор на 2 групі полів і на одне для заповнення. 3-5 рядків коду.
FelixIP

1
Я знехтував зазначити у своєму коментарі, що ці аргументи будуть включені до інструменту для обчислення arcpy: arcpy.CalculateField_management(inTable, fieldName, expression, "PYTHON_9.3", codeblock)якщо він буде використаний в автономному сценарії. Дякуємо, що описали кроки іншого підходу до використання свого коду в автономному сценарії.
користувач3467260

Все добре. У будь-якому випадку я маю враження, що курсор да набагато швидший, ніж калькулятор поля.
FelixIP
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.