总结dict值,而不是用Python覆盖它们



我是编码/编程的新手,我不能在字典里总结值。

所以这是我想要实现的:我有一个CSV文件,其中包含购买的产品,数据如下:

示例:

id,product_name,buy_date,buy_price,quantity,exp_date
1,apple,2022-01-26,0.8,38,2022-01-10
2,apple,2022-01-26,0.8,71,2022-01-10
3,banana,2022-01-26,0.8,62,2022-01-10
4,banana,2022-01-26,0.8,51,2022-01-10
5,grape,2022-01-26,1,45,2022-01-10
6,grape,2022-01-26,1,31,2022-01-10

从这个csv中,我想在dict中存储到期日期后的产品数量。

到目前为止,这是我的代码:

expired_dict ={}
with open("bought.csv", "r") as File:
for row in csv.DictReader(File):
if today() > row["exp_date"]:            
expired_dict.update({row["product_name"]:[row["quantity"]]})
Output:
{'apple': ['71'], 'banana': ['51'], 'grape': ['31']}

到目前为止,这只适用于存储产品,但正如您所看到的,它也会将数量更新到最后一行。但我需要添加这些值,而不是替换它们。我该如何构建?

您需要将CSV当前行中的值添加到相应的字典值中。

这是对collections.defaultdict()的一个很好的使用,如果它还不存在,它将创建dictionary元素。

import collections
expired_dict = collections.defaultdict(int)
with open("bought.csv", "r") as File:
for row in csv.DictReader(File):
if today() > row["exp_date"]:            
expired_dict[row["product_name"]] += int(row["quantity"])
print(expired_dict)
expired_dict ={}
with open("bought.csv", "r") as File:
for row in csv.DictReader(File):
if today() > row["exp_date"]:            
if(row["product_name"] in expired_dict:
expired_dict[row["product_name"]] = expired_dict[row["product_name"]]+ int(row["quantity"])
else:
expired_dict[row["product_name"]] = int(row["quantity"])

您可以如上所述更改代码,然后如果键存在,则添加值。

最新更新