Search code examples
python-3.6arcpy

Python ArcPy - Print Layer with highest field value


I have some python code that goes through layers in my ArcGIS project and prints out the layer names and their corresponding highest value within the field "SUM_USER_VisitCount". Output Picture

What I want the code to do is only print out the layer name and SUM_USER_VisitCount field value for the one layer with the absolute highest value. Desired Output

I have been unable to figure out how to achieve this and can't find anything online either. Can someone help me achieve my desired output?

Sorry if the code layout is a little weird. It got messed up when I pasted it into the "code sample"

Here is my code:

import arcpy
import datetime
from datetime import timedelta
import time


#Document Start Time in-order to calculate Run Time
time1 = time.clock()

#assign project and map frame
p = 
arcpy.mp.ArcGISProject(r'E:\arcGIS_Shared\Python\CumulativeHeatMaps.aprx')
m = p.listMaps('Map')[0]

Markets = [3000]


### Centers to loop through

CA_Centers = ['Castro', 'ColeValley', 'Excelsior', 'GlenPark', 
'LowerPacificHeights', 'Marina', 'NorthBeach', 'RedwoodCity', 'SanBruno', 
'DalyCity']   

for Market in Markets:
    print(Market)
    for CA_Center in CA_Centers:


        Layers = 
 m.listLayers("CumulativeSumWithin{0}_{1}_Jun2018".format(Market,CA_Center))

        fields = ['SUM_USER_VisitCount']


        for Layer in Layers:
            print(Layer)


            sqlClause = (None, 'ORDER BY ' + 'SUM_USER_VisitCount') # + 'DESC'

            with arcpy.da.SearchCursor(in_table = Layer, field_names = fields, 
            sql_clause = sqlClause) as searchCursor:
                print (max(searchCursor))

Solution

  • You can create a dictonary that stores the results from each query and then print out the highest one at the end.

    results_dict = {}
    for Market in Markets:
        print(Market)
        for CA_Center in CA_Centers:
    
    
            Layers = 
     m.listLayers("CumulativeSumWithin{0}_{1}_Jun2018".format(Market,CA_Center))
    
            fields = ['SUM_USER_VisitCount']
    
    
            for Layer in Layers:
                print(Layer)
    
    
                sqlClause = (None, 'ORDER BY ' + 'SUM_USER_VisitCount') # + 'DESC'
    
                with arcpy.da.SearchCursor(in_table = Layer, field_names = fields, 
                sql_clause = sqlClause) as searchCursor:
                    print (max(searchCursor))
                    results_dict[Layer] = max(searchCursor)
    
    # get key for dictionary item with the highest value
    highest_count_layer = max(results_dict, key=results_dict.get)
    print(highest_count_layer)
    print(results_dict[highest_count_layer])