如何遍历字典,基于前值按1.05倍率生成指定长度的迭代序列?
实现按指定长度生成复利增长的字典值列表
需求说明
给定样本数据集:
{'data1':200, 'data2':500}
需要为每个键生成一个长度为指定数值(示例中为2)的列表,列表第一个元素是原始值,后续每个元素由前一个值乘以1.05(即5%增长率)得到。当指定长度为2时,预期输出:
{'data1':[200,210], 'data2':[500, 525]}
实现思路
- 核心逻辑拆解:每个列表的元素本质是初始值乘以
1.05的幂次,第n个元素(从0开始计数)为初始值 * (1.05)^n,列表长度等于指定的范围值。 - 遍历处理字典:对原字典的每一对键值,生成对应的增长序列列表。
- 重组结果字典:将生成的键与序列列表组合,形成最终的结果字典。
代码实现
基础循环版本(易理解)
def generate_growth_dict(original_dict, sequence_length): result = {} for key, initial_val in original_dict.items(): current_val = initial_val growth_sequence = [] for _ in range(sequence_length): # 可根据需求添加round()保留小数位数,比如round(current_val, 2) growth_sequence.append(current_val) current_val *= 1.05 result[key] = growth_sequence return result # 测试示例 sample_data = {'data1':200, 'data2':500} print(generate_growth_dict(sample_data, 2)) # 输出: {'data1': [200, 210.0], 'data2': [500, 525.0]}
列表推导式版本(简洁高效)
利用Python的字典推导和列表推导简化代码:
def generate_growth_dict(original_dict, sequence_length): return { key: [initial_val * (1.05)**i for i in range(sequence_length)] for key, initial_val in original_dict.items() } # 测试示例 sample_data = {'data1':200, 'data2':500} print(generate_growth_dict(sample_data, 25))
注意事项
- 如果需要避免浮点数精度问题或统一格式,可以在生成元素时使用
round()函数,例如round(initial_val * (1.05)**i, 2)保留两位小数。 - 若指定的序列长度为1,结果中每个键对应的列表仅包含原始初始值。
内容的提问来源于stack exchange,提问作者Babz
相关产品推荐
相关产品推荐

