如何用for循环创建按比例折算的薪资等级字典?
解决薪资字典创建的错误与最优方法
错误原因分析
你代码里的dicts[day] = dicts[salary]是核心问题:这行代码试图从字典中取出键为salary的值赋值给键day,但你的字典初始是空的,不存在salary对应的键,所以触发KeyError。另外,循环一开始就执行day +=1,导致第1天的薪资根本没被加入字典。
修正后的基础代码
先把第1天的薪资写入字典,再循环处理后续天数:
dicts = {} total_days = 174 day = 1 salary = 1017781 # 先加入第1天的数据 dicts[day] = salary for _ in range(total_days - 1): day += 1 salary -= 5849 dicts[day] = salary # 验证前三个值 print({k: dicts[k] for k in range(1,4)}) # 输出: {1: 1017781, 2: 1011932, 3: 1006082}
最优方法:字典推导式
利用数学公式直接计算每天的薪资,不需要循环累加,代码更简洁高效:
薪资的计算公式为:salary = 初始薪资 - 日递减额 * (天数-1),因为第1天递减0次,第2天递减1次,以此类推。
initial_salary = 1017781 daily_decrease = 5849 total_days = 174 salary_dict = {day: initial_salary - daily_decrease * (day - 1) for day in range(1, total_days + 1)} # 验证结果 print({k: salary_dict[k] for k in range(1,4)}) # 输出: {1: 1017781, 2: 1011932, 3: 1006082}
这种写法避免了手动维护day和salary的变量状态,可读性和效率都更高,尤其适合这种有明确数学规律的场景。
内容的提问来源于stack exchange,提问作者rand_user_999
相关产品推荐
相关产品推荐

