Использование двух функций для создания среднего

#python

#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(значение (‘sample2.txt ‘))
#Затем я хочу использовать функцию def value() в функции ниже, чтобы вычислить среднее значение для каждого ключа. Если я получил результат выше, я теперь в этой функции получу:
{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() сообщает TypeError в строке 12 (помечена *), и я не понимаю, почему

Ответ №1:

Есть две проблемы. 1- Вам нужно добавить number к значениям вашего dict, поскольку вы будете использовать их для вычисления среднего

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

если вы не хотите этого делать, вы можете преобразовать значения в float перед вычислением mean в функции mean .

2- И, как упоминалось в другом ответе, вам следует избегать открытия файла дважды, заменяя

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

с

 calc=value(file)
 

Комментарии:

1. Предполагается, что первый код принимает файл с четырьмя индексами в каждой строке и возвращает первый и последний индексы в словаре. if-оператор выполняется, и он работает. Вывод может быть: {1:[2,4,3], 3:[5,6,1]}. Затем я хочу использовать функцию def value() в функции ниже, чтобы вычислить среднее значение для каждого ключа. Если я получил результат выше, я теперь в этой функции получу: {1:3, 3:4}

2. Извините, мой первый дубль был неправильным. Я обновил свой ответ, надеюсь, это поможет

Ответ №2:

вы открываете файл дважды один раз в mean и снова в value, пытаясь передать имя файла в mean:

 def mean(file):
    calc=value(file) # <<<<< this line changed
    result={}
    for bat,val in sorted(calc.items()):
        mean = (sum(val))/len(val)
        result[bat]=mean
        return result
 

Комментарии:

1. mean = sum(val)/len(val) Ошибка типа: неподдерживаемые типы операндов для : ‘int’ и ‘str’, я получил это как сообщение об ошибке