Python:从字典中删除值并将剩余的两个值相乘
我正在处理一个大的CSV文件,其中每行包括日期和两个值。我正试图建立一个字典,将日期作为这两个值的键。然后我需要将每个键的两个值相乘,并记录答案。文件中有3000行 样本: 到目前为止,我已经将日期设置为每对值的键,但是它也将日期作为每一个键集的第三个值进行重用,有没有办法删除这个 一旦我删除了这个,有没有一种方法可以将每个键集中的值相乘 这是我目前的代码:Python:从字典中删除值并将剩余的两个值相乘,python,csv,dictionary,Python,Csv,Dictionary,我正在处理一个大的CSV文件,其中每行包括日期和两个值。我正试图建立一个字典,将日期作为这两个值的键。然后我需要将每个键的两个值相乘,并记录答案。文件中有3000行 样本: 到目前为止,我已经将日期设置为每对值的键,但是它也将日期作为每一个键集的第三个值进行重用,有没有办法删除这个 一旦我删除了这个,有没有一种方法可以将每个键集中的值相乘 这是我目前的代码: main_file = "newnoblanks.csv" import csv import collections import p
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)
这是我的输出:
我认为您甚至不需要在这里使用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])
我认为您甚至不需要在这里使用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])
我知道这一点已经得到了回答,但我觉得有一个替代方案值得考虑:
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}
我知道这一点已经得到了回答,但我觉得有一个替代方案值得考虑:
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}
可能需要:
result[date].append(list(map(float,行[1:]))
可能需要:result[date].append(list(map(float,行[1:]))