微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 arcpy 和字典删除基于层次结构的重复记录

我正在尝试使用带有 arcpy 更新游标的数据字典来标记重复记录并删除它们,但我遇到了字典问题。

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

为了比较它们,游标直接从它所在的游标行中拉取第一个更改 (change_a) CHNG_TYPE。它还拉取 FACE_ID,以便它可以查询字典以获取一个 FACE_ID 的 CHNG_TYPE。

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

当我使用此代码创建字典但省略 elif 语句时,我可以使用 dict[FACE_ID] 准确地提取 change_b 值。

下面的代码,任何帮助表示赞赏!

@H_502_14@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]

举个例子,这个语句创建字典并返回期望值:

@H_502_14@with arcpy.da.UpdateCursor(fc,'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,{z_tolerance},{output_record_option})

这可能是比您的方式更快、更具成本效益的解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。