Как получить доступ к предыдущему ключу в al oop в словарях без упорядоченных словарей? - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь перебрать диктовку month_days по ключам, то есть месяцам, чтобы выполнить какое-то вычисление для сохранения в другом year_month_cal дикте после каждого l oop. Я пытаюсь написать обобщенный код вместо жесткого кодирования значения ключа каждый раз.

month_day = {'JAN': 31, 'FEB': 28, 'MARCH': 31, 'APRIL': 30, 'MAY': 31, 'JUNE': 30, 'JULY': 31, 'AUG': 31,
             'SEPT': 30, 'OCT': 31, 'NOV': 30, 'DEC': 31}
year_cal_no = {}

for k, v in month_day.items():
    month_cal ={}
    if k in month_day.keys():
        V = month_day[k]

        if k in ['JAN']:
            for i in range(1, V + 1):
                cal_no = 40
                month_cal_no = cal_no * i

                print(i, month_cal_no )
                month_cal[k] = cal_no
                year_cal_no[k] = month_cal_no
        if k in ['FEB']:
            for i in range(1, V + 1):
                #Here I want to remove JAN and access the previous key as k-1 or something
                cal_no = month_cal['JAN']
                month_cal_no = cal_no * i
                print(i, month_cal_no)

            month_cal[k] = cal_no
            year_cal_no[k] = month_cal_no

print(year_cal_no)
print(month_cal)

Вывод:

{'JAN': 1240, 'FEB': 1120}
{'JAN': 40, 'FEB': 40}

Мне нужна помощь, чтобы сделать эту логику c более универсальный c, чем жесткое кодирование ключа каждый раз.

1 Ответ

0 голосов
/ 12 апреля 2020

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

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

Вы должны назначить cal_no до цикла for i, так как он не изменяется в пределах l oop.

month_day = [('JAN', 31), ('FEB', 28), 'MARCH': 31, 'APRIL': 30, ('MAY', 31), 'JUNE': 30, 'JULY': 31, ('AUG', 31),
             'SEPT': 30, ('OCT', 31), ('NOV', 30), ('DEC', 31)]
year_cal_no = {}
month_cal = {}

month, days = month_day[0]
cal_no = 40
for i in range(1, days+1):
    month_cal_no = cal_no * i
    print(i, month_cal_no)
    month_cal[month] = cal_no
    year_cal_no[month] = month_cal_no

for month_index, (month, days) in enumerate(month_day[1:]):
    cal_no = month_cal[month_day[month_index][0]]
    for i in range(1, days+1):
        month_cal_no = cal_no * i
        print(i, month_cal_no)
        month_cal[month] = cal_no
        year_cal_no[month] = month_cal_no

print(year_cal_no)
print(month_cal)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...