Nano Hash - криптовалюты, майнинг, программирование

Найти максимальные значения в dict, содержащем списки

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

Главное – отметить самую высокую температуру за все годы цифрой (ATH), а самую высокую температуру за каждый год – цифрой (YearHighest).

My current code:
temp_dict= {
    "2010": [2, 3, 4, 5, 7, 3, 20, 29, 34, 2, 10, 1],
    "2011": [2, 7, 4, 5, 9, 3, 20, 9, 34, 2, 10, 10]
}

for key in temp_dict:
    print("Year",key,":")
    x=0
    for temps in temp_dict[key]:
        x=x+1
        print("Month "+str(x)+":%3d"%temps)
    print()

Я не уверен, как сделать максимальную функцию, я думал что-то вроде этого, но я не могу заставить ее работать:

for key in temp_dict:
    ATH = temp_dict[key]
    YearHigh = temp_dict[key][0]
        for temps in temp_dict[key]:
            if temps >= temp_dict[key][0]:
                 YearHigh = temps
    if YearHigh >= ATH:
         ATH = YearHigh

Как я хочу, чтобы мои результаты выглядели:

Year 2011 :
Month1:  2
Month2:  7
Month3:  4
Month4:  5
Month5:  9
Month6:  3
Month7: 20
Month8:  9
Month9: 34 (YearHighest)(ATH)
Month10:  2
Month11: 10
Month12: 10

Year 2010 :
Month1:  2
Month2:  3
Month3:  4
Month4:  5
Month5:  7
Month6:  3
Month7: 20
Month8: 29
Month9: 34 (YearHighest)(ATH)
Month10:  2
Month11: 10
Month12:  1

Ответы:


1

Это мой код.

temp_dict= {
    "2010": [2, 3, 4, 5, 7, 3, 20, 29, 34, 2, 10, 1],
    "2011": [2, 7, 4, 5, 9, 3, 20, 9, 34, 2, 10, 10]
}

# Find the highest temp of all years
ath = max([ max(v) for v in temp_dict.values()])

for key in temp_dict:
    # Output Year
    print("Year{k}:".format(k=key))
    x=0
    # Find max
    max_value = max(temp_dict[key])
    for temps in temp_dict[key]:
        # Output Month 
        x=x+1
        s = "Month {x}:{v:3d}".format(x=str(x), v=temps)
        # Tag the max value
        if max_value == temps:
            s += "(YearHighest)" 
        if ath == temps:
            s += "(ATH)"
        print(s)
    print()

И это мой выход.

Year2010:                                                                                                                                             
Month 1:  2                                                                                                                                           
Month 2:  3                                                                                                                                           
Month 3:  4                                                                                                                                           
Month 4:  5                                                                                                                                           
Month 5:  7                                                                                                                                           
Month 6:  3                                                                                                                                           
Month 7: 20                                                                                                                                           
Month 8: 29                                                                                                                                           
Month 9: 34(YearHighest)(ATH)                                                                                                                         
Month 10:  2                                                                                                                                          
Month 11: 10                                                                                                                                          
Month 12:  1                                                                                                                                          

Year2011:                                                                                                                                             
Month 1:  2                                                                                                                                           
Month 2:  7                                                                                                                                           
Month 3:  4                                                                                                                                           
Month 4:  5                                                                                                                                           
Month 5:  9                                                                                                                                           
Month 6:  3                                                                                                                                           
Month 7: 20                                                                                                                                           
Month 8:  9                                                                                                                                           
Month 9: 34(YearHighest)(ATH)                                                                                                                         
Month 10:  2                                                                                                                                          
Month 11: 10                                                                                                                                          
Month 12: 10

Здесь нужно использовать функцию max. Это может максимальное значение из номеров списка быстро.

26.04.2015

2

Python имеет встроенную функцию max. используй это.

Максимум в год:

max(temp_dict["2010"])

Максимум за все время:

max(sum(temp_dict.values(), []))

sum(lists, []) сглаживает список, что эквивалентно

[] + lists[0] + lists[1]...
26.04.2015
  • Вау, ты добавил туда секретный sum-list-flatten прием. Может запутать людей. Мог бы просто рассмотреть max(month_value for year in temp_dict.values() for month_value in year). Хотя, эй, вложенные генераторы тоже все время путают людей. 26.04.2015
  • Вы правы, это не очевидно. Я вставил небольшое пояснение. 26.04.2015

  • 3

    В Python есть встроенная функция max, которую вы можете использовать:

    for key in temp_dict:
        print("Year", key,":")
        temps = temp_dict[key]
        max_temp = max(temps)
        max_index = temps.index(max_temp)
        for index, temps in enumerate(temps):
            r = "Month "+str(index+1)+":%3d"%temps
            if index == max_index:
                r += "(YearHighest)(ATH)"
            print(r)
    
    26.04.2015
  • Как насчет двух (или более) месяцев с одинаковой максимальной температурой? 26.04.2015
  • @скоро Это тривиально. Вы можете удалить уже найденный максимум и снова использовать max, чтобы увидеть, есть ли два одинаковых максимума. 26.04.2015
  • Удаление предыдущей максимальной температуры является накладным, вы можете просто сравнить temps с max_temp внутри цикла. 26.04.2015

  • 4

    Вы можете попробовать что-то вроде этого:

    temp_dict= {
        "2010": [2, 3, 4, 5, 7, 3, 20, 29, 34, 2, 10, 1],
        "2011": [2, 7, 4, 5, 9, 3, 20, 9, 34, 2, 10, 10]
    }
    
    # defines the max of all years with a list comprehension
    global_max_temp = max([ max(year_temps) for year_temps in temp_dict.values() ])
    
    # iterates through each year
    for year, temps in temp_dict.items():
        print("Year {}".format(year))
        for i, temp in enumerate(temps):
            # prepares the output
            temp_string = ["Month{}: {}".format(i+1, temp)]
    
            # builds a list of flags to be displayed
            flags = []
            if temp == max(temps):
                # max in year flag
                flags.append("YearHighest")
            if temp == global_max_temp:
                # absolute max flag
                flags.append("ATH")
    
            # joins temp_string and flags in a single line and prints it
            print(" ".join(temp_string + [ "({})".format(flag) for flag in flags ]))
    

    Полезные ссылки из документации по Python: enumerate, списковые включения, max

    26.04.2015
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..