在Python中,如何从逗号分隔格式的文件中找到某个键的平均值?

在Python中,如何从逗号分隔格式的文件中找到某个键的平均值?,python,Python,那么我怎样才能从文件中找到平均值呢。我是python新手 我的文件如下所示: dog,3 dog,11 cat,3 cat,4 cat,15 首先,将计算分数的代码移动到if order=='alphastical':行之前,以便默认情况下计算该代码并在函数的其余部分中可用 现在,您可以执行以下操作: cat_list = [i[1] for i in scores if i[0]=='cat'] print(sum(cat_list)/len(cat_list)) 这将解析[('cat',3

那么我怎样才能从文件中找到平均值呢。我是python新手

我的文件如下所示:

dog,3 dog,11 cat,3 cat,4 cat,15
首先,将计算
分数的代码移动到
if order=='alphastical':
行之前,以便默认情况下计算该代码并在函数的其余部分中可用

现在,您可以执行以下操作:

cat_list = [i[1] for i in scores if i[0]=='cat']
print(sum(cat_list)/len(cat_list))

这将解析
[('cat',3),('dog',4),('cat',2)]
分数
,以打印
2.5的平均值

制作列表词典

def get_dictionary():
    handle = open("file_with_cats_n_dogs", "rb")
    d = {}
    for line in handle:
        key, number = line.strip().split(",")
        if key in d:
            d[key] += [float(number)]
        else:
            d[key] = [float(number)]
    return d 
然后你可以做:

def get_avg(numbers_dict, key):
    avg = sum(numbers_dict[key])/len(numbers_dict[key])
    return avg

您可以定义一个如下所示的函数,并使用它来找出狗、猫等项目的平均值

import csv

ef_file = open('e_form.txt')


def avg(fileHnadler,avgFor):
   csv_rows = csv.reader(fileHnadler)
   count=total=0
   for row in csv_rows:
       if row[0]==avgFor:
            total += float(row[1])
            count += 1

   if count!=0:
       return total/count
   else:
       return 'No Data in File'
然后您可以调用如下所示的函数

cat_avg = avg(ef_file,'cat')
在您的情况下,正如您正在代码中打开文件一样。因此,您只需使用适当的参数/参数调用此函数,即可获得所需的平均值。…

使用包含每个键的值的列表即可构造。简化了文件中数据的处理,将其拆分为单独的字段并剥离新行字符。然后,可以通过迭代字典中的项,对每个列表求和并除以列表长度来计算每个键的平均值。代码如下:

import csv
from collections import defaultdict

with open('file.txt') as f:
    pets = defaultdict(list)
    for row in csv.reader(f):
        pets[row[0]].append(float(row[1]))

    for pet, values in pets.items():
        print('{}: {:.2f}'.format(pet, sum(values) / len(values)))
输出

dog: 7.00 cat: 7.33 狗:7.00 猫:7.33
那么,你的代码有什么问题呢?最好对问题进行适当的格式设置,以便更多的人愿意关注你的问题。我改进了你的格式。如果您共享代码,那么您需要描述它当前的行为方式,而不是您希望它的行为方式。谢谢您的帮助。 dog: 7.00 cat: 7.33