Python:从字典中删除值并将剩余的两个相乘

问题描述 投票:0回答:2

我正在使用一个大型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)

这是我的输出:

python csv dictionary
2个回答
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
投票

我知道这已经得到了回答,但我觉得有另一种值得考虑的方法:

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}
© www.soinside.com 2019 - 2024. All rights reserved.