import arcpy # your data: tbl = r'C:\Project\_Forums\_maxDict\fgdb\test.gdb\aTable2' fld_freq = 'Frequency' fld_mapcode = 'Map_Code' fld_datasource = 'DataSource' # create empty dictionary to store results dct = {} # loop through table flds = (fld_freq, fld_mapcode, fld_datasource) with arcpy.da.SearchCursor(tbl, flds) as curs: for row in curs: freq = row[0] mc = row[1] ds = row[2] if mc in dct: freq_tot = dct[mc][0] + freq lst_ds = dct[mc][1] lst_ds.append(ds) dct[mc] = (freq_tot, lst_ds) else: dct[mc] = (freq, [ds]) # print results for mc, val in dct.items(): lst_ds = sorted(set(val[1])) # make a unique sorted list freq_tot = val[0] print freq_tot, mc, ";".join(lst_ds)
import arcpy, os arcpy.env.overwriteOutput = True # your data: tbl = r'C:\Project\_Forums\_maxDict\fgdb\test.gdb\aTable2' fld_freq = 'Frequency' fld_mapcode = 'Map_Code' fld_datasource = 'DataSource' # extra vars for output table out_ws = r'C:\Output' # r'C:\Project\_Forums\_maxDict\fgdb\test.gdb' tbl_name = 'mmc2.dbf' # 'mmc2' # create empty dictionary to store results dct = {} # loop through table flds = (fld_freq, fld_mapcode, fld_datasource) with arcpy.da.SearchCursor(tbl, flds) as curs: for row in curs: freq = row[0] mc = row[1] ds = row[2] if mc in dct: freq_tot = dct[mc][0] + freq lst_ds = dct[mc][1] lst_ds.append(ds) dct[mc] = (freq_tot, lst_ds) else: dct[mc] = (freq, [ds]) # write results to table arcpy.CreateTable_management(out_ws, tbl_name) tbl_out = os.path.join(out_ws, tbl_name) arcpy.AddField_management(tbl_out, fld_mapcode, "Text", 9, "", 10, "", "NULLABLE", "") arcpy.AddField_management(tbl_out, fld_freq, "LONG", 9, 0, "", "", "NULLABLE", "") arcpy.AddField_management(tbl_out, fld_datasource, "Text", 9, "", 255, "", "NULLABLE", "") # we still have the var flds with arcpy.da.InsertCursor(tbl_out, flds) as curs: for mc, val in dct.items(): lst_ds = sorted(set(val[1])) freq_tot = val[0] row = (freq_tot, mc, ";".join(lst_ds)) curs.insertRow(row)
import arcpy, os, numpy arcpy.env.overwriteOutput = True # your data: tbl = r'C:\Project\_Forums\_maxDict\fgdb\test.gdb\aTable2' fld_freq = 'Frequency' fld_mapcode = 'Map_Code' fld_datasource = 'DataSource' # extra vars for output out_ws = r'C:\Output' # r'C:\Project\_Forums\_maxDict\fgdb\test.gdb' tbl_name = 'mmc2.dbf' # 'mmc2' # create empty dictionary to store results dct = {} # loop through table flds = (fld_freq, fld_mapcode, fld_datasource) with arcpy.da.SearchCursor(tbl, flds) as curs: for row in curs: freq = row[0] mc = row[1] ds = row[2] if mc in dct: freq_tot = dct[mc][0] + freq lst_ds = dct[mc][1] lst_ds.append(ds) dct[mc] = (freq_tot, lst_ds) else: dct[mc] = (freq, [ds]) # create list for use in numpy; each item is a tuple of frequency, map code and list of datasources lst_out = [(val[0], mc, ";".join(sorted(set(val[1])))) for mc, val in dct.items()] # convert the list to a numpy array npa = numpy.array(lst_out, numpy.dtype([(fld_freq, numpy.int32), (fld_mapcode, '|S9'), (fld_datasource, '|S255')])) # store the table arcpy.da.NumPyArrayToTable(npa, os.path.join(out_ws, tbl_name), flds)
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.