Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python问题中的另一个列表csv文件_Python_Csv - Fatal编程技术网

Python问题中的另一个列表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

我有一个此格式的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 = 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'