我有一个这样的 csv 数据集:
A, 10, USA
B,30, UK
C,4,IT
A,20,UK
B,10,USA
我想读取此 csv 行并提供以下输出:
A has ran 30 miles with average of 15.
B has ran 30 miles with average of 20.
C has ran 4 miles with average of 4.
到目前为止,我的解决方案是读取 csv 数据并将它们转换为字典,然后遍历它们以查看“A”重复了多少次以及它必须计算哪些值来计算平均值并最终生成结果.我已经编写了这段代码,但我很难有效地计算 A 重复的次数并将英里数相加以创建我的最终输出。在 Python 中做这个有什么想法吗?在 C# 中执行此操作对我来说有点容易,但我不太擅长 Python。
def main(filename):
f = open(filename,'r')
labels = ['name','miles','country']
data = csv.DictReader(f,labels,delimiter=',')
for line in data:
print (line['name']+" " + "has ran" +" "+ line['miles']+" "+"miles")
f.close()
最佳答案
您可以使用defaultdict
来存储值,然后将它们打印出来:
import csv
from collections import defaultdict
with open(filename, 'r') as handle:
reader = csv.DictReader(handle, ['name', 'miles', 'country'])
data = defaultdict(list)
for line in reader:
data[line['name']).append(int(line['miles']))
for runner, distances in data.items():
print '{} ran a total of {} miles and an average of {} miles'.format(
runner, sum(distances), sum(distances) / float(len(distances))
)
关于python - 在 Python 中读取 csv 文件并创建字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15400165/