这里是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
答案 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 manager。 with
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)