Сравнение значений двух ключей в словаре и сохранение наибольшего значения - PullRequest
0 голосов
/ 25 сентября 2018

Итак, я беру свой словарный ключ: пары значений из списка и хочу создать из него словарь.Эти ключи - годы, но каждый год встречается 12 раз, я хочу, чтобы в моем словаре было сохранено самое большое значение каждого года.Это самый горячий день {}, который представляет самый жаркий день в этом году.Я добавил пример снимка экрана с данными.

import os
file_list = os.listdir('./weatherdata/')

hottest_day = {}
for file_name in file_list:
    max_temp = -99
    with open('weatherdata/' + file_name) as f:
        line = f.read().splitlines()
        req_line = line[2:-1]
        for lines in req_line:
            lines = lines.split(',')
            year = lines[0].split('-')[0]
            try:
                temp = int(lines[1])
            except ValueError:
                continue
            if temp >= max_temp:
                max_temp = temp
            if year in hottest_day:                 
                hottest_day[year] = max_temp
print(hottest_day)

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

{'2007': 43, '2010': 44,' 2006 ': 23,' 1997 ': 41,' 2001 ': 37,' 2008 ': 30,' 2003 ': 28,' 1998 ': 31,' 2005 ': 30,' 2009 ':31, '2002': 42, '2011': 22, '1999': 21, '2000': 44, '1996': 24, '2004': 41}

частьскриншот входного файла: https://i.stack.imgur.com/LTDcg.png

1 Ответ

0 голосов
/ 25 сентября 2018

По сути, ваша основная проблема в том, что вы хотите, чтобы максимальная температура в год была, но вы используете одну переменную max_temp для всех лет.Вы должны хранить разные max_temp для каждого года.Простым решением здесь является использование defaultdict для hottest_day с исходным значением -99 "max_temp" по умолчанию:

from collections import defaultdict

hottest_day = defaultdict(lambda: -99)

for file_name in file_list:
    with open('weatherdata/' + file_name) as f:
        # nb: this is a list of lines so it should be a plural
        # nb2: beware, you're reading the whole file in memory,
        # this can crash on huge files.
        lines = f.read().splitlines()

    lines = lines[2:-1]
    for line in lines:
        # nb : python as a `csv` module, which might be safer
        line = line.split(',')
        year = line[0].split('-')[0]
        try:
            temp = int(line[1])
        except ValueError as e:
            # you may want to log the error somewhere
            # for debugging...
            continue
        # defaultdict magic: if `year` has
        # not been set yet, it will default to -99
        if temp >= hottest_day[year]:
            hottest_day[year] = temp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...