对于列表中的项目,在字典中查找相同的项目,查找项目的值并汇总所有项目

时间:2014-09-14 15:51:13

标签: python list dictionary

我是stackoverflow的新手,也是Python或任何编程语言的新手。 我有一个相对简单的问题,但我无法弄清楚如何使它工作。

我需要找出购物清单中商品的总帐单。 购物清单数据在列表中,价格数据在字典中。

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

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

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

我什么都没回来。

非常感谢提前!

最好的问候IWTLP

3 个答案:

答案 0 :(得分:4)

您需要正确缩进return语句。所有计算完成后返回,而不是在for循环的中间。

def compute_bill(foods):
    total = 0
    for food in foods:
        if food in prices:
            total += prices[food]
    return total  # <---

并且,不要忘记调用该函数:

print(compute_bill(shopping_list))

另一个使用generator expressionsumdict.get的版本:

def compute_bill(foods):
    return sum(prices.get(food, 0) for food in foods)

<强>更新

正如Yoel所建议的那样,我重命名了迭代器food) to foods`,使其名称与迭代对象的名称不同。

答案 1 :(得分:0)

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

def compute_bill(shLst):
   return sum([price for food,price in prices.items() if food in shLst])

答案 2 :(得分:0)

如果您只想汇总购物车字典中所有商品的所有价值 你可以简单地做到

sum(prices.values())

如果您想从列表中过滤购物车中的商品:

sum([value for key,value in prices.items() if key in shopping_list])