首页 > 解决方案 > 使用两个函数来创建平均值

问题描述

这段代码应该在每行有四个索引的文件中接收并返回字典中的第一个和最后一个索引,如果满足 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(标有 *),我不明白为什么

标签: python

解决方案


有两个问题。1-您需要将数字附加到您的字典值,因为您将使用它们来计算平均值

if circle <= 1:
    value = float(four_vals[3].strip())
    bat_val[batch].append(value)

如果您不想这样做,您可以在计算平均值函数中的平均值之前将值转换为浮点数。

2-正如另一个答案中提到的,您应该避免通过替换打开文件两次

calc=value(open(file,'r') )

calc=value(file)

推荐阅读