python编程。ARCGIS的属性表中,假如已有LON和ADCODE这两列如何根据ADCODE和LON排序,实现ADDCODE列赋值

用python语言实现,现在已经用updadeCursor将所有行读取出来。已经实现了先按adcode再按lon排序,但对于adcode这一字段中相同的行,不知道如何判断... 用python语言实现,现在已经用updadeCursor将所有行读取出来。已经实现了先按adcode再按lon排序,但对于adcode这一字段中相同的行,不知道如何判断,请高手解答。
回1楼:我用rows=updateCursor("test.shp","","","ADCODE;LON"),读取出来行阵。
然后我想对ADCODE字段做判断,相同对我就从1开始递增,不同对就重新从1开始。
只是我不知道如何储存读取出来的行。存成可以row[0],row[1],row[2]这样的。
你上面定义的row[2],对于我读取出来的行阵没法这样指定。不知怎么用呢?
展开
 我来答
bdwisyou7d
2013-05-17 · TA获得超过1.3万个赞
知道大有可为答主
回答量:3774
采纳率:81%
帮助的人:1034万
展开全部
排序与排重,如果数据量少很容易。如果数据量大就需要建立索引。通过索引来检查是否有重复。

索引,通常用字典。也可以用set。如果想提高效果,可以将索引按前面(9个字节),你自己试一下做两级索引。这样速度会快很多。

你自己描述不清楚。弄不明白你想做什么?如果单纯排重是这样子
dict1={}
for row in rows:
adcode=row[2]
try:
dict1[adcode]
print "duplicate with..."
continue
except KeyError:
dict1[adcode]=None
#save row here
追问
谢谢回复,我现在只有ADCODE和LON字段,这是我的原数据,然后我要得到是ADCODE这个列,这个列是在ADCODE字段后加上3位标识码,如001,002这样的。LON字段是用来排序用的,就是ADDCODE要按照LON从小到大编码。{看问题补充}
追答
哦明白了。我建议你这样做。
先建立一个ADCODE为key的字典。然后将lon加进到去象这样,排序后就可以生成
inputs=[] # (lon,ADCODE),(lon,ADCODE),
#....
#load from file
#....
outputs=[]
tmpd={}
for lon,ADCODE in inputs:
try:
tmpd[ADCODE].append(lon)
except KeyError:
tmpd[ADCODE]=[lon]
for ADCODE in tmpd:
tmpd[ADCODE].sort()
for i in xrange(len(tmpd[ADCODE])):
ADDCODE="%s%03d"%(tmpd[ADCODE][i],i+1)
outputs.append((lon,ADCODE,ADDCODE))

#outputs就是你要的内容。当然你也可以
#outputs.sort()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
TableDI
2024-07-18 广告
VLOOKUP是Excel中用于垂直查找的函数,其基本用法包括四个参数:1. 查找值:即在数据表首列中需要搜索的值。2. 数据表:包含查找值的单元格区域或数组。3. 返回值所在列数:指定返回查询区域中第几列的值。4. 查找方式:选择精确匹配... 点击进入详情页
本回答由TableDI提供
登斯楼
2013-05-18 · TA获得超过911个赞
知道小有建树答主
回答量:301
采纳率:100%
帮助的人:304万
展开全部
楼上的我看不是arcpy使用者,根本没必要写的那么麻烦。

可以用while循环来做,类似如下,我没有测试。
row = rows.next()
testValue = row.ADDCODE
row = rows.next()
while row:
temp = row.ADDCODE
if testValue == temp:
pass
else:
pass
row = rows.next()
更多追问追答
追问
是从第二行开始吧,用个变量存储上一行?能不能加些说明,pass那里根据要求加判断后
语句?
追答
写错了,应该类似如下,ff是新建的一个字符串字段,用于存储编码值:

rows = updateCursor("test.shp","","","ADCODE;LON")
row = rows.next()
testValue = row.ADDCODE
num = 1

row.ff = '0001'
row = rows.next()
while row:
if row.ADDCODE == testValue:
row.ff = ':0>4'.format(num + 1) #假设编码是4位,以0为填充值

num = num + 1

else:
row.ff = '0001'

num = 1
testValue = row.ADDCODE

row = rows.next()
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式