Python 使用arcpy和字典删除基于层次结构的重复记录

Python 使用arcpy和字典删除基于层次结构的重复记录,python,dictionary,arcpy,Python,Dictionary,Arcpy,我试图标记重复记录并使用带有arcpy update游标的数据字典删除它们,但遇到了字典问题 本质上,我的代码遍历属性表,并为每个新的FACE_ID添加一个FACE_ID:CHNG_类型的字典条目。如果遇到字典中已经存在的FACE_ID,它会比较重复FACE_ID的CHNG_类型,以确定应该删除哪个(我忽略了加权比较,因为这不是问题) 为了比较它们,游标直接从它所在的游标行中提取第一个change(change_a)CHNG_类型。它还提取FACE_ID,以便查询字典以获取另一个FACE_ID的

我试图标记重复记录并使用带有arcpy update游标的数据字典删除它们,但遇到了字典问题

本质上,我的代码遍历属性表,并为每个新的FACE_ID添加一个FACE_ID:CHNG_类型的字典条目。如果遇到字典中已经存在的FACE_ID,它会比较重复FACE_ID的CHNG_类型,以确定应该删除哪个(我忽略了加权比较,因为这不是问题)

为了比较它们,游标直接从它所在的游标行中提取第一个change(change_a)CHNG_类型。它还提取FACE_ID,以便查询字典以获取另一个FACE_ID的CHNG_类型

当我打印这本词典时,它看起来就像我期望的那样。但是,change\u b=dict[row[0]]每次计算都是相同的值,我不知道为什么

当我使用这段代码创建字典但不使用elif语句时,我可以使用dict[FACE\u ID]准确地提取change\b值

下面的代码,并感谢任何帮助

with arcpy.da.UpdateCursor(fc, ['FACE_ID', 'CHNG_TYPE', 'RELATE']) as cursor:
        dict = {}
        for row in cursor:
                if row[0] in dict:
                        change_a = row[1]
                        change_b = dict[row[0]]
                        print(change_a + ' ' + change_b)
                elif row[0] not in dict:
                        dict[row[0]] = row[1]
举个例子,此语句创建字典并返回预期值:

with arcpy.da.UpdateCursor(fc, ['FACE_ID', 'CHNG_TYPE', 'RELATE']) as cursor:
        dict = {}
        for row in cursor:
                if row[0] not in dict:
                        dict[row[0]] = row[1]
dict[123456]

您是否考虑过使用ArcGIS Pro中提供的删除相同功能或查找相同功能

arcpy.management.DeleteIdentical(in_dataset, fields, {xy_tolerance}, {z_tolerance})

arcpy.management.FindIdentical(in_dataset, out_dataset, fields, {xy_tolerance}, {z_tolerance}, {output_record_option})

这可能是一种比您的方式更快、更经济的解决方案。

结果证明,这是行不通的,因为它只能识别/删除重复项。我需要根据其他标准评估应该删除哪些重复项。