如何在 Python 中的字典值上应用函数?

时间:2021-07-15 12:17:46

标签: python csv dictionary

我有以下 CSV,这是 Python 中的字典输入。在本例中为 Test.csv。

Cust_Id, No_of_purchases, Amount
xxx0001, 2000,3000 
xxx0002, 30 ,400
xxx0002, 20,500

下面的代码读取它并将字典键作为“Customer_ID”输出,其余的作为值输出。

with open('Test.csv', mode='r') as csv_input: 
    reader = [[x.strip() for x in rows.split(",")] for rows in csv_input.readlines()]

(customer_, *Purchases_amount), *row_values = reader 
dict_ = {}
for each_row in row_values:
    key, *values = each_row   
    dict_from_csv[key] = {key: value for key, value in zip(Purchases_amount, values)}

打印 dict_from_csv 的结果如下所示,加上另外两行。

{'xxx0001': {'No_of_purchases': '2000',
  'Amount': '3000'}, .....

问题是:如果金额大于 1000,我如何应用 5% 的折扣,否则字典中“金额”值的折扣为 0?关键只是 Cust_Id。我有以下函数来计算折扣。如何将其应用于字典中的值“Amount”?

def givediscount (value):
    dis= 0.05*value
    nodiscount = 0
    if value > 1000:
       dis = nodiscount
       break 
       nodiscount+=1
    return dis 

2 个答案:

答案 0 :(得分:1)

你可以像这样在你的字典上应用一个函数:

def give_discount(row):
    amount = row.get("Amount", 0)
    if amount > 1000:
        row["discounted_amount"] = 0.95 * amount
    else:
        row["discounted_amount"] = amount
    return row

dict_from_csv = {k: give_discount(row) for k, row in dict_from_csv.items()}
    

答案 1 :(得分:0)

给定的折扣函数似乎是错误的。根据您的描述,这应该有效

def give_discount(amount):
    if amount > 1000:
        return amount * 0.95
    return amount

您可以遍历字典中的元素并调用类似的函数

for i in dict_from_csv.keys():
    dict_from_csv[i]['Amount'] = give_discount(dict_from_csv[i]['Amount'])
相关问题