我是编码/编程的新手,我不能在字典里总结值。
所以这是我想要实现的:我有一个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"])
您可以如上所述更改代码,然后如果键存在,则添加值。