Python ArcPy — слой печати с самым высоким значением поля

У меня есть некоторый код Python, который проходит через слои в моем проекте ArcGIS и выводит имена слоев и их соответствующее максимальное значение в поле «SUM_USER_VisitCount». Выходное изображение

Что я хочу, чтобы код делал, так это распечатывал только имя слоя и значение поля SUM_USER_VisitCount для одного слоя с абсолютным наивысшим значением. Желаемый результат

Я не смог понять, как это сделать, и не могу найти ничего в Интернете. Может ли кто-нибудь помочь мне достичь желаемого результата?

Извините, если макет кода немного странный. Он испортился, когда я вставил его в «образец кода».

Вот мой код:

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))

person Matt A.    schedule 14.08.2018    source источник


Ответы (1)


Вы можете создать словарь, в котором будут храниться результаты каждого запроса, а затем распечатать самый высокий результат в конце.

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])
person BigGerman    schedule 14.08.2018
comment
Спасибо за ваш ответ. Я попробовал ваш код, но он дает мне тот же вывод на печать, что и раньше. - person Matt A.; 15.08.2018
comment
Возможно, я неправильно истолковал ваш код из-за форматирования. Проверьте мое редактирование, чтобы убедиться, что это правильно. - person BigGerman; 15.08.2018
comment
Я действительно не вижу разницы между вашей первой и второй версиями, но я попробовал, и все равно дает те же результаты. - person Matt A.; 16.08.2018
comment
Я не редактировал код в своем ответе, я редактировал код в вашем сообщении с вопросом. Я хотел убедиться, что мои изменения вашего кода были правильными. - person BigGerman; 16.08.2018
comment
Хорошо, мы приближаемся. На этот раз он распечатал Layer (47.0), что является наименьшим значением и отсутствует фактическое имя слоя. - person Matt A.; 16.08.2018
comment
Можете ли вы добавить оператор печати в конце, который распечатывает весь results_dict (т.е. print(results_dict) и вставляет вывод сюда? Я хочу посмотреть, как этот dict выглядит в конце. Трудно отладить это, не зная, как выглядят данные или вывод как. - person BigGerman; 16.08.2018
comment
это результаты, которые я получаю при использовании print(results_dict). {'Layer': (47.0,)}. Мне кажется, что словарные записи могут перезаписывать друг друга - person Matt A.; 17.08.2018
comment
Да, они перезаписывали друг друга, у меня было results_dict['Layer'] вместо results_dict[Layer]. Проверьте это сейчас. - person BigGerman; 17.08.2018