Python编写返回除数为键、对应可整除数值列表为值的字典问题
错误原因分析
- 第一次代码错误:循环中每次判断后直接对键赋值为单个整数或空列表,覆盖了之前的结果,最终仅保留了区间最后一个数的判断结果,无法收集所有符合条件的数值。
- 第二次代码错误:未提前为字典的每个除数键初始化空列表,第一次调用
append()方法时对应键不存在,触发KeyError。 - 第三次代码错误:
dict.fromkeys(divisor)默认将所有键的值设为None,无法调用列表的append()方法;且每次判断不符合时直接赋值空列表,会清空之前已经存入的符合条件的数值。
正确实现思路
- 首先遍历除数列表,为每个除数在结果字典中初始化一个空列表作为初始值,避免键不存在或值类型错误的问题。
- 遍历
[lower, upper]区间内的所有整数。 - 对每个整数,逐一判断是否能被当前除数整除,若能整除则追加到对应除数的列表中,不要修改不符合条件的列表。
- 遍历结束后返回结果字典即可。
正确代码
def create_divisor_dict(divisors, lower, upper): # 初始化结果字典,每个除数对应独立的空列表 result = {d: [] for d in divisors} # 遍历区间内所有整数 for num in range(lower, upper + 1): for d in divisors: if num % d == 0: result[d].append(num) return result
测试验证
调用create_divisor_dict([1,2,5],2,4),返回结果为{1:[2,3,4],2:[2,4],5:[]},和预期完全一致。
内容的提问来源于stack exchange,提问作者SilverSwan
相关产品推荐
相关产品推荐

