试图在字典中查找多个值的平均值

时间:2014-05-03 23:53:16

标签: python dictionary key average key-value

这里是python的新手。试图找到字典中总计键的平均值。

我设法获取每个键的所有值的总和,但我不确定如何找到这些新值的平均值。

import os

f = open("iris.data", "r")
count = 0
d = {}
# You want the dictionary to have d = {Iris-setosa: list of values]
# Populate dictionary
# Code would work regardless of file
# Reference movie names file

for line in f:
    if line.isspace():
        continue #If a particular line is made of just spaces, ignore it
    strip = line.strip("\n") #Strips out that particular string
    data = strip.split(",")
    name = data[4]

    if name in d:
        for i in range(len(data)-1):
            d[name][i] += float(data[i])
        d[name][4] += 1 #increment count
        count += 1
    else:
        d[name] = [float(i) for i in data[0:4]]
        d[name].append(1) #keep count
        count = 1
print(d)

f.close

2 个答案:

答案 0 :(得分:2)

您已经存储了每个值列表的计数;只需循环遍历字典 items (键值)对并使用值列表的最后一个元素:

for key, values in d.items():
    avg = [v / values[-1] for v in values[:-1]]
    print(key, *avg)

这使用每个values列表的最后一个元素作为行数,并使用list comprehension为每个列生成平均值。

其他一些评论:

  • 你显然有一个CSV文件;考虑使用csv module代替。

  • 您从未调用 f.close()方法;你只是引用它。

    但是,您应该考虑将文件对象用作context managerwith statement确保在退出块时关闭文件:

    with open("iris.data", "r") as f:
        for line in f:
            line = line.rstrip('\n')
            if not line:
                continue
    

答案 1 :(得分:0)

您可以将值转换为列表,然后求和,并除以列表的长度:

values = d.values()
average_value = sum(values) / len(values)

由于值是列表,您可以获得每个列表的平均值:

for v in d.values():
    average_value = sum(v) / len(v)