Python问题中的另一个列表csv文件
我有一个此格式的csv文件,我想为每个步骤生成平均值:Python问题中的另一个列表csv文件,python,csv,Python,Csv,我有一个此格式的csv文件,我想为每个步骤生成平均值: elapsed,label 120,Step 01 260,Step 02 113,Step 03 100,Step 01 200,Step 02 103,Step 03 但是我很难弄清楚这些清单。我使用的Python脚本是: for file in sys.argv[1:]: for row in csv.DictReader(open(file)): label = row['label'] elapsed = r
elapsed,label
120,Step 01
260,Step 02
113,Step 03
100,Step 01
200,Step 02
103,Step 03
但是我很难弄清楚这些清单。我使用的Python脚本是:
for file in sys.argv[1:]:
for row in csv.DictReader(open(file)):
label = row['label']
elapsed = row['elapsed']
print elapsed,label
我试过了
label.append(行['appead'])
和label.append('appead')
,但在每种情况下,我都会遇到此错误
AttributeError: 'str' object has no attribute 'append'
TypeError: list indices must be integers, not str
我不确定如何克服这个错误。我是Python新手,所以也许我在列表的工作方式中遗漏了什么?如果我能在步骤01中得到一个类似[120100]的列表,我可以很容易地对其求和并求平均值,但这是我一直坚持的列表创建部分
编辑:结果的总和列表
现在,我有这个:
for item in result:
for n in result[item]:
int(n)
print sum(float(result[item][n]))
但是你会得到这个错误
AttributeError: 'str' object has no attribute 'append'
TypeError: list indices must be integers, not str
但是“n”已经是一个整数了,不是吗?或者这是指“项目”?我想我现在比以前更困惑了。如果你想要的是列出清单
from collections import defaultdict
steps = defaultdict(list)
for file in sys.argv[1:]:
for row in csv.DictReader(open(file)):
steps[row['label']].append(row['elapsed'])
averages = dict((key, sum(value)) for key, value in steps.iteritems())
我会给你平均数
您正在尝试将行['appeased']
中的字符串添加到标签中的字符串,但字符串是不可变的,因此无法追加到。您可以使用string1+string2
或`'.join((string1,string2))将它们连接起来
编辑:另外,有关新错误,请参阅“我的代码”的最后一行,或尝试:
averages = {}
for item in result.iteritems():
print item[0], sum(item[1])
如果你想列清单
from collections import defaultdict
steps = defaultdict(list)
for file in sys.argv[1:]:
for row in csv.DictReader(open(file)):
steps[row['label']].append(row['elapsed'])
averages = dict((key, sum(value)) for key, value in steps.iteritems())
我会给你平均数
您正在尝试将行['appeased']
中的字符串添加到标签中的字符串,但字符串是不可变的,因此无法追加到。您可以使用string1+string2
或`'.join((string1,string2))将它们连接起来
编辑:另外,有关新错误,请参阅“我的代码”的最后一行,或尝试:
averages = {}
for item in result.iteritems():
print item[0], sum(item[1])
我相信这将实现您的目标:
result = dict()
for file in sys.argv[1:]:
for row in csv.DictReader(open(file)):
label = row['label']
elapsed = float(row['elapsed'])
if label in result:
result[label].append(elapsed)
else:
result[label] = [elapsed]
totals = dict((label, sum(values)) for label, values in result.iteritems())
执行此操作后,result
将以您想要的格式包含列表。我相信这将实现您的目标:
result = dict()
for file in sys.argv[1:]:
for row in csv.DictReader(open(file)):
label = row['label']
elapsed = float(row['elapsed'])
if label in result:
result[label].append(elapsed)
else:
result[label] = [elapsed]
totals = dict((label, sum(values)) for label, values in result.iteritems())
执行此操作后,result
将以您想要的格式包含列表。(代表问题作者发布解决方案)
非常感谢@Pablo、@agf和@ms4py。你的意见使我想到了这一点
result = dict()
av = []
idx = []
for file in sys.argv[1:]:
for row in csv.DictReader(open(file)):
label = row['label']
elapsed = row['elapsed']
if label in result:
result[label].append(elapsed)
else:
result[label] = [elapsed]
for i in sorted (result.iterkeys()):
s = sum(int(v) for v in result[i])
a = s/float(len(result[i]))
(代表问题作者发布解决方案)
非常感谢@Pablo、@agf和@ms4py。你的意见使我想到了这一点
result = dict()
av = []
idx = []
for file in sys.argv[1:]:
for row in csv.DictReader(open(file)):
label = row['label']
elapsed = row['elapsed']
if label in result:
result[label].append(elapsed)
else:
result[label] = [elapsed]
for i in sorted (result.iterkeys()):
s = sum(int(v) for v in result[i])
a = s/float(len(result[i]))
此外,您可以通过int(标签[5:])
将步数作为整数。您需要一个defaultdict
,就像我在回答中使用的那样。@agf谢谢!我自己还在学习Python,我不知道。谢谢@Pablo。我刚刚更新了我的问题,因为现在我看到另一个错误。。。也许我低估了这个练习。。。我错过了什么@ms4py,很抱歉,我不知道你所说的int(标签[5:])
。。。你能把它放在上下文中吗?此外,您可以通过int(标签[5:])
将步数作为整数。您需要一个defaultdict
,就像我在回答中使用的那样。@agf谢谢!我自己还在学习Python,我不知道。谢谢@Pablo。我刚刚更新了我的问题,因为现在我看到另一个错误。。。也许我低估了这个练习。。。我错过了什么@ms4py,很抱歉,我不知道你所说的int(标签[5:])
。。。你能把它放在上下文中吗?这并不是他想要达到的目标的解决方案。你应该已经注意到他的方法是完全错误的。谢谢@agf,我在运行这个脚本时遇到了这个错误:TypeError:第一个参数必须是可调用的
。然后我从defaultdict([])
中删除了[]
,然后得到以下信息:KeyError:“步骤01”
并不是他想要实现的真正解决方案。你应该已经注意到他的方法是完全错误的。谢谢@agf,我在运行这个脚本时遇到了这个错误:TypeError:第一个参数必须是可调用的
。然后,我从defaultdict([])
中删除了[]
,然后得到以下信息:KeyError:'Step 01'