2つのディクテーションを作成しようとしています.1つはストリート値で、もう1つはストリート値が奇数です。各通りにはRef_IDがあり、それぞれの辞書にはこれらの値をキーとして使用し、対応するシーケンス番号を値として使用します。配列を使用してdictを構築するときにキーエラーが発生する
私は値として配列で辞書を作るために、元のポストを見た: append multiple values for one key in Python dictionary
私は偶数と奇数のための条件文を考えるだけでなく、arcpy.SearchCursorを使用してが、私のコードでこれをやってみました
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です。私はちょうど私がsoemthingを得るかどうか見るためにインデックスを変更しようとしましたが、それはまだ同じです。私もstr(行[0])をeLinksで変換しようとしましたが、役に立たないです。
この意志ならば、私は知りません問題を修正しますが、 'elif'の後に' if'が 'eLinks'の' row [0] 'を探していますが、おそらく' oLinks'を見るべきです。それは常に 'False'を返します。手動で初期化する必要がない(つまり、ネストされた 'if'sをスキップすることができるように)' eLinks'と 'oLinks''をdefaultdict(list)'にしたいかもしれません。 – Mikk
oLinksのタイプミスを指摘してくれたMikkに感謝します。私はそれを変更してコレクションを使用しましたが、同じ結果が得られました。私はその後、入れ子式のifを取り除き、それは魅力のように働いた。先に進んで答えを投稿すれば、私はそれをチェックします。ありがとう! – ShaunO
実際には、あなた自身の質問に答える必要があると思いますが、私はあなたがしたことについて100%確信していません:-) – Mikk