排序后填充唯一ID字段,Python

排序后填充唯一ID字段,Python,python,sorting,updates,arcpy,Python,Sorting,Updates,Arcpy,我正在尝试在access表中创建一个新的唯一id字段。我已经有一个名为SITE\u ID\u FD的字段,但它是历史字段。该字段中唯一值的格式与当前格式不同,因此我正在使用新格式创建一个新字段 Old Format = M001, M002, K003, K004, S005, M006, etc New format = 12001, 12002, 12003, 12004, 12005, 12006, etc 我写了以下脚本: fc = r"Z:\test.gdb\testfc" x

我正在尝试在access表中创建一个新的唯一id字段。我已经有一个名为
SITE\u ID\u FD
的字段,但它是历史字段。该字段中唯一值的格式与当前格式不同,因此我正在使用新格式创建一个新字段

Old Format = M001, M002, K003, K004, S005, M006, etc

New format = 12001, 12002, 12003, 12004, 12005, 12006, etc
我写了以下脚本:

fc = r"Z:\test.gdb\testfc"

x = 12001

cursor = arcpy.UpdateCursor(fc)

for row in cursor:
    row.setValue("SITE_ID", x)
    cursor.updateRow(row)
    x+= 1
这很好,但它会根据objectID的默认排序填充新的id字段。我需要先对2个字段进行排序,然后根据排序填充新的id字段(我想按名为
SITE
的字段排序,然后按旧id字段
SITE\id\u FD
排序)


我尝试手动对这两个字段排序,希望Python能够支持这种排序,但事实并非如此。我不知道如何在Python中实现这一点。有人能推荐一种方法吗?

在评论中添加了一个指向arcpy文档的链接,但据我所知,这将创建一个新的排序数据集--

这将在已排序的数据集上执行您想要的操作:

fc = r"Z:\test.gdb\testfc_sort"
x = 12001
cursor = arcpy.UpdateCursor(fc)

for row in cursor:
    row.setValue("SITE_ID", x)
    cursor.updateRow(row)
    x+= 1
我假设有某种方法可以将经过排序/修改的数据集复制回原始数据集,那么一切都好吗


我承认,我不使用arcpy,文档可以更加明确。

一个可能的解决方案是在创建更新游标时。您可以向光标指定希望对其进行排序的字段(对不起,我的英语是…),它们在文档中对此进行了解释:

所以它是这样的:
UpdateCursor(数据集,{where_子句},{spatical_reference},{fields},{sort_fields})
您只对sort_字段感兴趣,因此假设您的代码在已排序的表上运行良好,并且您希望根据代码的第二部分对该表进行排序,则应如下所示:

fc = r"Z:\test.gdb\testfc"

x = 12001

cursor = arcpy.UpdateCursor(fc,"","","","SITE A, SITE_ID_FD A") 
#if you want to sort it descending you need to write it with a D 
#>>  cursor = arcpy.UpdateCursor(fc,"","","","SITE D, SITE_ID_FD D")

for row in cursor:
    row.setValue("SITE_ID", x)
    cursor.updateRow(row)
    x+= 1
我希望这有帮助

fc = r"Z:\test.gdb\testfc"

x = 12001

cursor = arcpy.UpdateCursor(fc,"","","","SITE A, SITE_ID_FD A") 
#if you want to sort it descending you need to write it with a D 
#>>  cursor = arcpy.UpdateCursor(fc,"","","","SITE D, SITE_ID_FD D")

for row in cursor:
    row.setValue("SITE_ID", x)
    cursor.updateRow(row)
    x+= 1