Python两个dict的元素除法为何返回int而非预期的float
问题根因
当前代码返回整数结果的核心原因是使用了地板除运算符//,而非浮点除法运算符:
//是Python的向下取整除法,两个整数执行该运算时会直接截断小数部分,返回纯整数结果,示例中20//7、24//7、30//7的运算结果就分别对应你输出里的2、3、4/是Python3的标准浮点除法,运算结果始终返回浮点数类型,和操作数是否为整数无关
修正实现
将字典推导式里的//替换为/即可得到预期的浮点结果,同时建议调整字典取值的默认值避免除以0报错:
test_dict1 = {'gfg': 20, 'is': 24, 'best': 30} test_dict2 = {'gfg': 7, 'is': 7, 'best': 7} # 替换//为/,同时将get方法的默认值从0调整为1,避免缺失key时触发除零错误 res = {key: test_dict1[key] / test_dict2.get(key, 1) for key in test_dict1.keys()} # 运行结果为浮点类型字典:{'gfg': 2.857142857142857, 'is': 3.4285714285714284, 'best': 4.285714285714286}
补充说明:如果需要控制浮点数的保留精度,可以在除法运算后套用
round()方法做截断处理。
内容的提问来源于stack exchange,提问作者Croyd
相关产品推荐
相关产品推荐

