使用arcpy
,我的目的是在列表中存储一个要素类以供进一步处理。每行将是 dict {'field name': value}
,包括几何。
完成此任务的最 Pythonic 方式应该是使用列表推导:
fc = '/path/to/fc'
fields = [f.name for f in arcpy.ListFields(fc)] # get field list
features = [[row.getValue(f) for f in fields] for row in arcpy.SearchCursor(fc)]
此方法适用于数据,但列表中的几何图形都是相同的(在 fc 中检索到的最后一个几何图形)。SearchCursor 的这种行为已经在 StackOverflow 上进行了评论。
我尝试了另一种方法:
fc = '/path/to/fc'
shape_field = arcpy.Describe(fc).shapeFieldName
# load geometry in a list
geom = arcpy.Geometry()
feat = [{shape_field: f} for f in arcpy.CopyFeatures_management(fc, geom)] # slow
# load data in a list
fields = [f.name for f in arcpy.ListFields(fc)]
data = [dict([(f, row.getValue(f)) for f in fields if f != shape_field]) for row in arcpy.SearchCursor(fc)] # slow
# merge
merge = zip(feat, data)
merge = [dict([(k, v) for adict in line for (k, v) in adict.items()]) for line in merge] # sorry for that...
它适用于我的数据集,但是:
- 它很慢。
- 我不确定断言数据和壮举的顺序相同是否安全。
对此有何看法?