Python 如何找到字典中与某些单词对应的所有数字的总和

Python 如何找到字典中与某些单词对应的所有数字的总和,python,for-loop,dictionary,return,function,Python,For Loop,Dictionary,Return,Function,如果我有一本这样的字典: a = ['a':1, 'b':2, 'c':3] 显然,这三个数字之和是六。我如何在任何这样的列表中找到总数。我的意思是: def compute_sum(a): total = 0 for n in a: total += prices[n] return total 那么我是对的,这意味着我可以返回任何类似列表的总和?还有其他方法吗?您将如何使用相同或不同的功能来执行此操作?如果total和prices[food]属于同

如果我有一本这样的字典:

a = ['a':1, 'b':2, 'c':3]
显然,这三个数字之和是六。我如何在任何这样的列表中找到总数。我的意思是:

def compute_sum(a):
    total = 0
    for n in a:
        total += prices[n]
    return total

那么我是对的,这意味着我可以返回任何类似列表的总和?还有其他方法吗?您将如何使用相同或不同的功能来执行此操作?

如果
total
prices[food]
属于同一类型,则此语句没有任何错误。但是,如果您尝试添加(或连接)不同的类型,您肯定会遇到错误

其次,应该将
shopping\u list
作为参数传递给要迭代的函数,而不是
food
。因此,应该更改函数接收的参数名


第三,
total
变量应该在函数内部,而不是外部。按照您编写本文的方式,您将在执行时得到
UnboundLocalError:assignment之前引用的局部变量“total”。函数有自己的局部作用域,其中变量是单独定义的。

您需要稍微更改循环。
假设shopping_list类似于
shopping_list={'bread':1.00,'eggs':0.99}
,则可以执行以下操作:

def compute_bill(shopping_list):
    total = 0.0
    for food in shopping_list.keys():
        total += shopping_list[food]
    return total
试试这个

def compute_bill(food):
    for food,prices in shopping_list:
        total += prices
    return total

有些人怎么不能缩进它

我不知道食物变量应该是什么意思!根据我对问题的理解,代码如下:

def compute_bill(shopping_list, prices):
    total = 0
    for food in shopping_list:
        total += prices[food]
    return total
我会怎么做:

shopping_list = []
prices = {"food_item": price_in_decimal, ... }

for item in stuff_you_want_to_buy:
    shopping_list.append(item)

def compute_bill(shopping_list):
    total = 0
    for item in shopping_list:
        try:
            total += prices[item]
        except KeyError as e:
            # that item does not have a price, handle it
    return total
更好(但更复杂):

如果你问我的话,应该可以

然而,这里是你的方法固定,所以它的工作

def compute_bill(): #no argument needed
    total = 0 #initialize total to zero in your method
    for food in shopping_list:
        total += prices[food]
    return total

我想出来了。以下是正确的代码:

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

事实证明,我应该列出食物,而不是以食物作为参数列出不同的列表。谢谢。

您有什么错误?我们需要更多的信息来帮助你。似乎是正确的。你试过了吗?
food
是函数参数,也是
for循环中的迭代器。把食物换成别的东西。您还需要将购物清单作为参数传递,为什么甚至有一个参数传递到该函数中?它说有一个单独的价目表您能举个例子说明单独的价目表是什么意思吗?它是
food=['bread','egons']
prices=[1.00,0.99]
之类的东西,而不是真正的字典吗?没关系。。。我认为“购物清单”是一个清单,“价格”是一本字典。这个问题模棱两可!这不会引起
名称错误:购物清单没有定义吗?你为什么这么认为?他在某处确定了购物清单。。。(OP的原始问题证明了这一点,他在其中引用了该问题,但没有显示…(但是,作为旁白,我确实认为你是对的,这是预期行为…(即购物清单被传递到fn中),+1到你的答案)它不在另一个模块中,它只是在某个地方定义的。。。在同一个文件中。。。未包含在OP提供的代码中(即在此文件范围内)。。。同样,在OP的问题中,你可以看到他在方法中引用了它,他得到的错误不是名称错误,这让我相信它是包含方法范围的某个地方。。。(我做了+1你的回答,因为我确实认为这更可能是他的预期行为,但这不是他在这里遇到的问题)不,Joran Beasley是对的,我错了,函数首先在局部范围内查找变量,如果没有找到,函数然后在全局范围内查找。但是这里可能潜藏着另一个错误-
food
将依次从购物列表中获取值,而不是索引,因此下一条语句
prices[food]
可能会让
索引器感到惊讶:列表索引超出范围
…不,您是不正确的<代码>对于某些目录中的项
将在键上迭代。。。不是价值观和食品价格是一本字典而不是一个根据OP问题列出的清单。。。如果
shopping\u list
实际上是一个列表,它仍将迭代列表中的项目名称。。。它在他的价格数据库中“查找”(实际上他只是在使用字典)
def compute_bill(): #no argument needed
    total = 0 #initialize total to zero in your method
    for food in shopping_list:
        total += prices[food]
    return total
def compute_bill(food):
total = 0
for n in food:
    total += prices[n]
return total