我有一个.csv文件,如下所示:
name1 name2 name3
value1 value2 value3
value4 value5 value6
value7 value8 value9
我需要在Python3中找到一种方法来创建一个字典,其中键是头名(name1,name2,name3),值是下面所有值的总和。 name1:(value1 + value4 + value7)。
到目前为止,我已经提出了:
def sumColumns(columnfile):
import csv
with open(columnfile) as csvfile:
rdr = csv.reader(csvfile)
output = {}
head = next(rdr)
total = 0
for column in head:
for row in rdr:
total += int(row[head.index(column)])
output[column] = total
total = 0
return output
我最终返回了一个带有正确标题的字典,但是我无法确定的总和出现了问题。一列得到总和,其余为0。
答案 0 :(得分:1)
绝对不是我最漂亮的代码。但在这里。基本上,只需将所有信息存储在列表列表中,然后从那里迭代它。
def sumColumns1(columnfile):
import csv
with open(columnfile) as csvfile:
r = csv.reader(csvfile)
names = next(r)
Int = lambda x: 0 if x=='' else int(x)
sums = reduce(lambda x,y: [ Int(a)+Int(b) for a,b in zip(x,y) ], r)
return dict(zip(names,sums))
在有人抱怨之前,以扩展形式(或没有reduce
的形式):
def sumColumns1(columnfile):
import csv
with open(columnfile) as csvfile:
r = csv.reader(csvfile)
names = next(r)
sums = [ 0 for _ in names ]
for line in r:
for i in range(len(sums)):
sums[i] += int(0 if line[i]=='' else line[i])
return dict(zip(names,sums))
给我正确的输出。希望有人提出更多pythonic的东西。