#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’, я получил это как сообщение об ошибке