python - 使用两个函数来创建平均值
问题描述
这段代码应该在每行有四个索引的文件中接收并返回字典中的第一个和最后一个索引,如果满足 if 语句,它就可以工作。输出可能是:{1:[2,4, 3], 3:[5,6,1]}
def value(filename):
f=open(filename,'r') *
bat_val=defaultdict(list)
for line in f:
four_vals = (line.split(','))
batch=four_vals[0]
x=float(four_vals[1])
y=float(four_vals[2])
circle = x**2 + y**2
if circle <= 1:
value = four_vals[3]
bat_val[batch].append(value.strip())
f.close()
return bat_val
print(value('sample2.txt')) #那我想用下面函数中的def value()-函数来计算每个key的平均值。如果我得到上面的输出,我现在将在这个函数中得到:{1:3, 3:4}
def mean(file):
calc=value(open(file,'r') )
result={}
for bat,val in sorted(calc.items()):
mean = (sum(val))/len(val)
result[bat]=mean
return result
print(mean('sample4.txt'))
#但是函数 def value() 在第 12 行显示 TypeError(标有 *),我不明白为什么
解决方案
有两个问题。1-您需要将数字附加到您的字典值,因为您将使用它们来计算平均值
if circle <= 1:
value = float(four_vals[3].strip())
bat_val[batch].append(value)
如果您不想这样做,您可以在计算平均值函数中的平均值之前将值转换为浮点数。
2-正如另一个答案中提到的,您应该避免通过替换打开文件两次
calc=value(open(file,'r') )
和
calc=value(file)
推荐阅读
- ckeditor - CKEditor 5 为图像添加标题
- c# - Dragablz - 恢复关闭的标签页
- javascript - 如何解决弹性碰撞?
- lua - 如何在没有垃圾收集器立即销毁对象的情况下将函数调用与 Lua 中的中间返回对象链接起来?
- python - 如何从 C 程序中调用带有内存视图的 Cython 的 cdef 函数?
- javascript - 生成和复制用户生成的链接
- python-3.x - 将 YAML 文件中的列表传递给 python
- javascript - 搜索对象数组以匹配输入
- javascript - 防止人们不使用 prompt() 输入?
- php - 在 Android 设备(本地/离线)上运行我的网站(html5、js、php)