การเพิ่มฟิลด์อัตโนมัติขึ้นอยู่กับกลุ่มภายในคลาสคุณลักษณะ?


10

ฉันต้องการเพิ่มฟิลด์โดยอัตโนมัติตามกลุ่มภายในคลาสคุณลักษณะ ฉันมี 8 แปลงภายในรูปหลายเหลี่ยมที่กำหนดและฉันต้องกำหนด ID จาก 1-8 สำหรับแต่ละชุดของรูปหลายเหลี่ยมภายในแต่ละรูปหลายเหลี่ยม รูปหลายเหลี่ยมจะมีหมายเลข ID เฉพาะของตัวเองเพื่อใช้จัดกลุ่มแปลง

ฉันคิดว่ามันจะเป็นการเปลี่ยนแปลงของสิ่งนี้:

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

1
คุณอาจต้องการอ่านข้อมูลเพิ่มเติมเกี่ยวกับการใช้งานตัวดำเนินการโมดูลัสของ Python ( %)
Vince

คำตอบ:


12

เครื่องคำนวณภาคสนามสำหรับ Python

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

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

GroupOrder( !locality! )

เปลี่ยน! ท้องที่! ไปยังสาขาที่เกี่ยวข้อง

UPDATE: รูปแบบของการแสดงออกนี้:

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

ควรทำงานได้เร็วขึ้นมากบนชุดข้อมูลขนาดใหญ่


หากมีการใช้ฟังก์ชัน GroupOrder ในสคริปต์ python แบบสแตนด์อโลนGroupOrderฟังก์ชันจะเป็นcode blockอาร์กิวเมนต์และอาร์กิวเมนต์นั้นGroupOrder( !locality! )จะเป็น 'expression'
user3467260

ในสคริปต์คือ: a) สร้างพจนานุกรม b) อัปเดตเคอร์เซอร์บนกลุ่มเขตข้อมูล 2 กลุ่มและกลุ่มที่จะเติม โค้ด 3-5 บรรทัด
FelixIP

1
ฉันละเลยที่จะพูดถึงในความคิดเห็นของฉันว่าข้อโต้แย้งเหล่านั้นจะรวมอยู่ในเครื่องมือคำนวณเขตข้อมูล arcpy: arcpy.CalculateField_management(inTable, fieldName, expression, "PYTHON_9.3", codeblock)หากใช้ในสคริปต์แบบสแตนด์อะโลน ขอบคุณที่อธิบายขั้นตอนต่าง ๆ ในการใช้รหัสของคุณในสคริปต์แบบสแตนด์อะโลน
user3467260

ทั้งหมดดี. อย่างไรก็ตามฉันรู้สึกว่าเคอร์เซอร์ดาเร็วกว่าเครื่องคำนวณภาคสนามมาก
FelixIP
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.