currently have a code that i would like to update a certain field based off of two other fields but i am getting a error.
Error:TypeError: list indices must be integers, not str.
on line : row[7] = (sourceFieldsList['SiteStreet_1'] + " " + sourceFieldsList['StreetType_1'])
The only difference in the fields is that some have different lengths, the fields are 'String' fields so i am not sure what's going on other then the lengths. Do the fields have to be the same lengths?
Any help would be great, thanks!
# define the field list from the spatial join sourceFieldsList = ["TARGET_FID", poly,"SiteAddress",'SiteNum_1', 'SiteStreet_1','SiteNumSfx_1','Predir_1','SiteStreet_1', 'Postdir_1', 'SiteCity_1', 'SiteZIP_1', 'OwnerName_1','StreetType_1'] # # define the field list to the original points updateFieldsList = ["OID@", Pnt,"SiteAddres", 'SiteNum', 'StreetName', 'SiteNumSfx','Predir','SiteStreet', 'Postdir', 'SiteCity', 'SiteZip', 'OwnerName' 'StreetType'] # Start an edit session. Must provide the workspace. edit = arcpy.da.Editor(arcpy.env.workspace) # Edit session is started without an undo/redo stack for versioned data # (for second argument, use False for unversioned data) edit.startEditing(True) # Start an edit operation edit.startOperation() manualFields = ["FacltyType","GIS_STEW", "StructType", "Verified", "Status", "StructCat", "APA_CODE",'StreetName'] #] with arcpy.da.UpdateCursor(pointLayer, manualFields) as rows: for row in rows: row[0] = ("Single Family Home") row[1] = ("Canyon") row[2] = ("Primary, Private") row[3] = ("Yes, GRM, TA") row[4] = ("LM") row[5] = ("Residential") row[6] = ("1110") row[7] = (sourceFieldsList['SiteStreet_1'] + " " + sourceFieldsList['StreetType_1']) rows.updateRow(row)
Solved! Go to Solution.
I'm not exactly sure what you're trying to do with this code, but neither:
sourceFieldsList['SiteStreet_1'] # error
...nor...
sourceFieldsList[4] # the string 'SiteStreet_1'
...will provide you with the value of a cell in the column, 'SiteStreet_1'. But, if you just want the string, 'SiteStreet_1', then reference it in position 4, as above.
You are slicing by text instead of a number
sourceFieldsList['SiteStreet_1'] # change 'SiteStreet_1' to the index number within that list
What are you trying to accomplish with the following logic?
sourceFieldsList = ["TARGET_FID", poly,"SiteAddress",'SiteNum_1', 'SiteStreet_1','SiteNumSfx_1','Predir_1','SiteStreet_1', 'Postdir_1', 'SiteCity_1', 'SiteZIP_1', 'OwnerName_1','StreetType_1'] sourceFieldsList['SiteStreet_1'] + " " + sourceFieldsList['StreetType_1']
You won't be able to slice a list in python with a string. Are you trying to get the index of the word in the list?
I'm not exactly sure what you're trying to do with this code, but neither:
sourceFieldsList['SiteStreet_1'] # error
...nor...
sourceFieldsList[4] # the string 'SiteStreet_1'
...will provide you with the value of a cell in the column, 'SiteStreet_1'. But, if you just want the string, 'SiteStreet_1', then reference it in position 4, as above.