首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用数组构建dict时出现键错误

使用数组构建dict时出现键错误
EN

Stack Overflow用户
提问于 2017-02-01 06:27:03
回答 1查看 775关注 0票数 0

我正在尝试构建两个字典,一个具有偶数街值,另一个具有奇数街值。每条街都有一个Ref_ID,我希望每个dict使用这些值作为关键字,并使用它们相应的序列号作为值。

我在上一篇文章中看到了一个使用数组作为值的字典:append multiple values for one key in Python dictionary

我试着在我的代码中做到这一点,尽管我认为偶数和奇数的条件以及使用arcpy.SearchCursor会增加代码的复杂性:

代码语言:javascript
复制
import arcpy

#service location layer
fc = r"J:\Workspace\FAN3 sequencing3\gisdb\layers.gdb\Rts_239_241_314_GoLive"

# create variables

f1 = "Route"
f2 = "Ref_ID"
f3 = "Sequence"
f4 = "Street_Number"

# create containers

rSet = set()
eLinks = dict()
oLinks = dict()

# make a route list

with arcpy.da.SearchCursor(fc, f1) as cursor:
    for row in cursor:
        rSet.add(row[0])
    del row

# list of even side street sequences
eItems = []
eCheckStreet = []

# list of odd side street sequences
oItems = []
oCheckStreet = []

# make two dicts, one with links as keys holding sequence values for the even side of the street
# the other for the odd side of the street

for route in rSet:
    with arcpy.da.SearchCursor(fc, [f2,f3,f4]) as cursor:
        for row in cursor:
            if row[2] != '0' and int(row[2]) % 2 == 0:
                if row[0] in eLinks:
                    eLinks[str(row[0])].append(row[1])
                else:
                    eLinks[str(row[0])] = [row[0]]
            elif row[2] != '0' and int(row[2]) % 2 != 0:
                if row[0] in eLinks:
                    oLinks[str(row[0])].append(row[1])
                else:
                    oLinks[str(row[0])] = [row[0]]
        del row

print eLinks, oLinks

输出是作为键和值的Ref_ID。我试着更改索引,看看是否会有所不同,但它仍然是一样的。我也尝试过在eLinks中转换if str(row),但无济于事。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-02 00:07:26

问题可能出在嵌套的if中,以及这些条件如何相互影响。您不必肩负起对字典进行标准键检查的责任:您的有一个内置的数据结构可以做到这一点:collections.defaultdicthttps://docs.python.org/2/library/collections.html#collections.defaultdict

代码语言:javascript
复制
import arcpy
from collections import defaultdict

#service location layer
fc = r"J:\Workspace\FAN3 sequencing3\gisdb\layers.gdb\Rts_239_241_314_GoLive"

# create variables

f1 = "Route"
f2 = "Ref_ID"
f3 = "Sequence"
f4 = "Street_Number"

# create containers

rSet = set()
eLinks = defaultdict(list)
oLinks = defaultdict(list)

# make a route list

with arcpy.da.SearchCursor(fc, f1) as cursor:
    for row in cursor:
        rSet.add(row[0])
    del row


# make two dicts, one with links as keys holding sequence values for the even side of the street
# the other for the odd side of the street

for route in rSet:
    with arcpy.da.SearchCursor(fc, [f2,f3,f4]) as cursor:
        for row in cursor:
            if row[2] != '0' and int(row[2]) % 2 == 0:
                eLinks[str(row[0])].append(row[1])
            elif row[2] != '0' and int(row[2]) % 2 != 0:
                oLinks[str(row[0])].append(row[1])
        del row
print eLinks, oLinks
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41968620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档