Champ d'incrémentation automatique basé sur des groupes au sein de la classe d'entités?

10

J'ai besoin d'incrémenter automatiquement un champ en fonction de groupes au sein d'une classe d'entités. J'ai 8 parcelles dans un polygone donné et je dois leur attribuer un ID de 1 à 8 pour chaque ensemble de parcelles dans chaque polygone. Le polygone aurait son propre numéro d'identification unique à utiliser pour regrouper les tracés.

Je suppose que ce serait une altération de ceci:

rec=0
def autoIncrement():
 global rec
 pStart = 1 
 pInterval = 1 
 if (rec == 0): 
  rec = pStart 
 else: 
  rec = rec + pInterval 
 return rec
Becks
la source
1
Vous voulez probablement lire sur l'utilisation de l'opérateur module de Python ( %)
Vince

Réponses:

12

Calculatrice de champ pour Python

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

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

GroupOrder( !locality! )

Changez! De localité! au domaine pertinent.

MISE À JOUR: Cette variation d'expression:

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

Devrait fonctionner beaucoup plus rapidement sur de grands ensembles de données.

FelixIP
la source
Si la fonction GroupOrder devait être utilisée dans un script python autonome, la GroupOrderfonction serait l' code blockargument et l'argument GroupOrder( !locality! )«expression».
user3467260
Dans le script, il s'agit de: a) créer un dictionnaire b) mettre à jour le curseur sur un groupe de 2 champs et un à remplir. 3-5 lignes de code.
FelixIP
1
J'ai négligé de mentionner dans mon commentaire que ces arguments seraient inclus dans l'outil de calcul d'arcpy field: arcpy.CalculateField_management(inTable, fieldName, expression, "PYTHON_9.3", codeblock)s'ils sont utilisés dans un script autonome. Merci d'avoir décrit les étapes d'une approche différente de l'utilisation de votre code dans un script autonome.
user3467260
Tout bon. Quoi qu'il en soit, j'ai l'impression que le curseur est beaucoup plus rapide que la calculatrice de terrain.
FelixIP