如何将字典发送到python中的函数?

时间:2015-05-28 18:56:37

标签: python dictionary

shopping_list = ["banana", "orange", "apple"]

stock = {
    "banana": 6,
    "apple": 0,
    "orange": 32,
    "pear": 15
    }

prices = {
    "banana": 4,
    "apple": 2,
    "orange": 1.5,
    "pear": 3
    }

在下面编写代码!

def compute_bill(food):
    total = 0
    for key in food:
        total = total + food[key]
    return total
print compute_bill(prices)

我在Codeacademy.com上,他们还没有真正解释如何将字典发送到函数。只是列表。当我运行这段代码时,它会打印出我想要的内容,但后来我收到了这个错误,无法继续:

Oops, try again. compute_bill(['apple']) resulted in a TypeError: list
indices must be integers, not str

2 个答案:

答案 0 :(得分:2)

用户更好的变量名称,这样您就不会混淆自己。您有一张价格表,并且您想要查看购物清单中的每个商品"使用该表:

price_table = prices = {
    "banana": 4,
    "apple": 2,
    "orange": 1.5,
    "pear": 3
    }

# Write your code below!
def compute_bill(things_I_want_to_buy):
    total = 0
    for item in things_I_want_to_buy:
        total = total + price_table[item]
    return total
print compute_bill(['apple', 'pear'])

答案 1 :(得分:0)

嗯,除了编码练习之外,实际问题的答案是你将字典传递给函数的方式与列表,整数,字符串,集合,元组或对象相同。自己定义的类型。

例如,假设我有一个名为quack_show的函数,我写了它希望得到一个鸭子列表并使它们都嘎嘎叫:

def quack_show(duck_list):
    for duck in duck_list:
        duck.quack()

有人可以将鸭子列表传递给该函数,但没有任何人必须遵守的限制。

首先,duck_list不一定是鸭子的列表,只是任何具有quack()方法的任意对象我都可以调用。

其次,duck_list不一定是列表,只是我可以用for duck in duck_list迭代的东西。您可以迭代列表,集合,元组,甚至可以定义自己可以执行此操作的对象。您可以迭代字符串,您将获得单个字符。

对于该函数而言,重要的是您实际上可以迭代,并且容器中的所有对象都具有quack()方法。如果字典键是可以quack()的对象,那么甚至可以将此函数发送到字典。