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

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.