我正在处理一个大型CSV文件,其中每行包含日期和两个值。我正在尝试设置一个字典,其中日期是两个值的关键。然后我需要将每个键的两个值相乘并记录答案。我在文件中有3000行。
样品:
到目前为止,我将日期设置为每对值的键,但是它也将日期重用为每个键集的第三个值,有没有办法删除它?
一旦我删除了这个,有没有办法在每个密钥集中将值相乘?
到目前为止,这是我的代码:
main_file = "newnoblanks.csv"
import csv
import collections
import pprint
with open(main_file) as fp:
root = csv.reader(fp, delimiter=',')
result = collections.defaultdict(list)
for row in root:
date = row[0].split(",")[0]
result[date].append(row)
print ("Result:-")
pprint.pprint(result)
这是我的输出:
答案 0 :(得分:1)
我认为你甚至不需要在这里使用defaultdict,只需将整行(减去日期)分配给dict的键。你应该能够做到
with open(main_file) as fp:
root = csv.reader(fp, delimiter=',')
result = dict()
for row in root:
date = row[0].split(",")[0]
result[date] = row[1:]
如果您想获得这两个值的乘积,您可以执行类似
的操作for key in result:
result[key] = reduce(lambda x, y: x*y, result[key])
答案 1 :(得分:1)
我知道这已经得到了回答,但我觉得有另一种值得考虑的方法:
import csv
from pprint import pprint
with open('newnoblanks.csv') as fp:
root = csv.reader(fp)
result = dict((date, float(a) * float(b)) for date, a, b in root)
pprint(result)
使用以下数据文件:
19/08/2004,49.8458,44994500
20/08/2004,53.80505,23005800
23/08/2004,54.34653,18393200
输出结果为:
{'19/08/2004': 2242786848.1,
'20/08/2004': 1237828219.29,
'23/08/2004': 999606595.5960001}