如何将Python字典按键划分到等间隔区间并整理对应值
Python实现字典按键固定间隔分区的优雅方案
实现思路
- 先根据设定的步长计算所有需要覆盖的区间左边界,保证空区间也不会遗漏
- 用整数除法快速计算每个键所属的区间位置,逻辑通用适配任意步长
- 先初始化所有区间的默认值,再遍历原字典填充对应区间的数值,避免遗漏无值区间
代码实现
def group_dict_by_interval(original_dict: dict, step: int, fill_value=0) -> dict: if not original_dict: return {} # 计算区间起止范围 min_key = min(original_dict.keys()) max_key = max(original_dict.keys()) min_interval = (min_key // step) * step max_interval = (max_key // step) * step # 初始化结果字典,所有区间先填充默认值 result = { interval: [fill_value] for interval in range(min_interval, max_interval + step, step) } # 填充实际存在的数值 for key, value in original_dict.items(): current_interval = (key // step) * step if result[current_interval] == [fill_value]: result[current_interval] = [value] else: result[current_interval].append(value) return result # 测试示例 if __name__ == "__main__": test_dict = {0: 1, 10: 3, 12: 2, 19: 4, 35: 5} # 步长10,默认填充0 print(group_dict_by_interval(test_dict, step=10)) # 输出:{0: [1], 10: [3, 2, 4], 20: [0], 30: [5]} # 自定义填充None的情况 print(group_dict_by_interval(test_dict, step=10, fill_value=None)) # 输出:{0: [1], 10: [3, 2, 4], 20: [None], 30: [5]}
方案优势
- 符合PEP8开发规范,添加了类型提示,可读性和可维护性高
- 通用程度高,步长、填充值都支持自定义,不需要硬编码区间范围
- 时间复杂度为O(n),n为原字典的键值对数量,性能表现优异
- 自动覆盖所有区间,不会遗漏无值的区间,完全匹配需求输出格式
内容的提问来源于stack exchange,提问作者DevBabai
相关产品推荐
相关产品推荐

