python - 如何在没有有序字典的字典中访问循环中的前一个键?
问题描述
我正在尝试迭代month_days
几个月的键的字典,以year_month_cal
在每个循环之后执行一些计算以存储在另一个字典中。我正在尝试编写通用代码,而不是每次都对键值进行硬编码。
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}
我需要帮助以使此逻辑更通用,而不是每次都对密钥进行硬编码。
解决方案
使用元组列表而不是字典。然后,当您遍历列表时,您可以访问上一个索引。
此外,您不应month_cal
在每次迭代中重置字典,因为您会丢失上个月的信息。
cal_no
您应该在循环之前分配for i
,因为它不会在循环内改变。
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)
推荐阅读
- spring-boot - Springboot如何锁定libs的版本,比如Rails的Gemfile.lock?
- c# - 创建按钮并将其放置在某些 xaml 窗口上而不使用 xaml 代码
- php - 尝试使用 PHP 根据服务器时间显示不同的横幅图像
- pagespeed-insights - 如何从我的国家获得访问结果?
- html - XSL:如何在样式表中使用 HTML 标签?
- python - 如何在不使用 Biopython 的情况下从 FASTA 文件中获取此输出?
- azure-ad-graph-api - 一旦通过 Azure AD B2B api 发送邀请,如何设置来宾用户的hireDate 属性?
- javascript - Node.js 中的 Ruby Rails .inject 等效项
- r - Travis CI 在 pkg-config 搜索路径中找不到包
- wordpress - 如何添加远程代码以防止代码分发