另一个列表csv文件在Python问题 [英] Yet Another list csv file in Python Question

查看:102
本文介绍了另一个列表csv文件在Python问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个文件csv文件在这种格式,我想生成每个步骤的平均值:

 已过,标签
120,步骤01
260,步骤02
113,步骤03
100,步骤01
200,步骤02
103,步骤03

但我很难计算出列表。我使用的python脚本是:

 用于sys.argv [1:]中的文件:
for row在csv.DictReader(打开(文件)):
label = row ['label']
elapsed = row ['elapsed']
打印已过,标签

我试过了



label.append (row ['elapsed']) label.append('elapsed'),但在每种情况下都会收到此错误

  AttributeError:'str'对象没有属性'append'

我不确定如何得到这个错误。我是新的Python,所以也许我错过了一些方式列表工作...?如果我可以得到一个像[120,100]的步骤01的列表,我可以很容易地求和和平均,但它是列表创建部分,我困在。



非常感谢!



编辑:结果列表



现在,我有:

 用于结果中的项目:
for n in result [item]:
int(n)
print sum(float(result [item] [n]))

但得到此错误

  TypeError:list indices必须是整数,而不是str 

但是n是一个整数,还是这是指项目...?我想我现在比以前更困惑... mm ...



最终解决方案:非常感谢@Pablo,@agf& ; @ ms4py。你的输入给我这个。

  result = dict()
av = []
idx = []
文件在sys.argv [1:]中:
for csv.DictReader(open(file)):
label = row ['label']
elapsed = row ['elapsed' ]
如果结果中的标签:
result [label] .append(elapsed)
else:
result [label] = [elapsed]
for i in sorted result.iterkeys()):
s = sum(int(v)for result in result [i])
a = s / float(len(result [i]))

很遗憾,我只能接受一个答案。再次感谢大家!

解决方案

如果你想要的是列表,

 从集合import defaultdict 
steps = defaultdict(list)

for sys.argv [1:]:
for csv.DictReader(open(file)):
steps [row ['label']]。append(row ['elapsed'])

averages = dict ,sum(value))for key,value in steps.iteritems())



您正在做的是尝试将 row ['elapsed'] 中的字符串添加到 label 中的字符串,但字符串是不可变的,因此无法附加到。您可以使用 string1 + string2 或`'。.join((string1,string2))加入。



编辑:另外,对于你的新错误,看到我的代码的最后一行,或尝试:

  averages = {} 
for result.iteritems():
print item [0],sum(item [1])$ ​​b $ b

$ b b

I have a file csv file in this format, I would like to generate the average for each step:

elapsed,label
120,Step 01
260,Step 02
113,Step 03
100,Step 01
200,Step 02
103,Step 03

but am having a hard time figuring the lists out. The python script that I am using is:

for file in sys.argv[1:]:
  for row in csv.DictReader(open(file)):
    label = row['label']
    elapsed = row['elapsed']
    print elapsed,label

I've tried

label.append(row['elapsed']) and label.append('elapsed'), but in each case I get this error

AttributeError: 'str' object has no attribute 'append'

I am unsure how to get past this error. I'm new to Python, so perhaps I am missing something in the way lists work ... ? If I can get a list like [120,100] for step 01, I can easily sum and average it, but it is the list creation part that I am stuck on.

Many thanks!

Edit: Sum of result list

Now, I have this:

  for item in result:
    for n in result[item]:
      int(n)
      print sum(float(result[item][n]))

but get this error

TypeError: list indices must be integers, not str

But "n" is an integer already, no ... ? Or is this referring to "item" ... ? I think I am more confused now than before ... mm ...

Final Solution: Many thanks to @Pablo, @agf & @ms4py. Your input brought me to this.

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]))

Sadly I can only accept one answer. Thank you all again!

解决方案

If what you want is to make lists,

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())

Will give you the averages.

What you're doing is attempting to add the string in row['elapsed'] to the string in label, but strings are immutable so can't be appended to. You can join them with string1 + string2 or `''.join((string1, string2)).

EDIT: Also, for your new error, See the last line of my code, or, try:

averages = {}
for item in result.iteritems():
    print item[0], sum(item[1])

这篇关于另一个列表csv文件在Python问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆