查找总和,使用 for 循环遍历两个字典,将键值相乘



刚开始学习python3,就遇到了字典。教程问题询问以下内容:

创建一个名为 weight 的字典,使用以下值进行初始化: "铅笔":10 "笔":20 "纸":4 "橡皮擦":80

创建另一个名为 available 的字典,使用以下值进行初始化: "笔":3 "铅笔":5 "橡皮擦":2 "纸":10

这是我遇到困难的地方:

编写代码来确定所有可用项目的总重量(即所有钢笔、铅笔、纸和橡皮擦的总重量是多少?

我需要使用 for 循环来循环键来执行此操作。

为了练习获取总和,我首先获取每个字典的总和:

`weight = {"pencil": 10, "pen": 20, "paper": 4, "eraser": 80}
print("Overall weight: ", (sum(weight.values())))
available = {"pen": 3, "pencil": 5, "eraser": 2, "paper": 10}
print("Available items: ", (sum(available.values())))`

这给了我每个输出为: 总重量:每件物品总重量114 #the 可用物品:20 #the 物品总数

这并不能真正帮助我回答这个问题,因为将这些值相乘会得到错误的答案。

这就是我到目前为止得到的,但我真的不知道如何使用 for 循环,所以不断收到错误:

`weight = {"pencil": 10, "pen": 20, "paper": 4, "eraser": 80}
available = {"pencil": 5,"pen": 3, "paper": 10, "eraser": 2}
overall_weight = 0
# missing for loop here
print("Overall weight: ", overall_weight)`

是这样的吗?

`for key in weight.keys() & available.keys():
print(weight.items()) * (available.items())
#missing a line here
return overall_weight` 

手动,我可以看到总重量应该是310。 (5*10)+(3*20)+(10*4)+(2*80) = 310

我知道答案可能很简单,但真的没有弄清楚。任何建议将不胜感激。

这应该是你所要做的。

total = 0
for key, value in weight.items():
total += value * available[key]
print(total)  # 310

此代码确实要求密钥存在于两个字典中。如果您尝试访问不存在的密钥,则会抛出密钥错误。因此,您可以在访问可用密钥之前检查密钥是否存在。

total = 0
for key, value in weight.items():
if key in available:
total += value * available[key]

您可以使用.keys().items()来获取遍历字典时所需的内容。

.keys()将返回字典键的可迭代对象。

dict_keys(['pencil', 'pen', 'paper', 'eraser'])

.items()将返回字典中每个项目的键和值。这很有用,因此我们在循环访问该项目时不必再次访问该项目的字典。

for k, v in weight.items():
print(k, v)

这将打印:

pencil 10
pen 20
paper 4
eraser 80

强烈建议阅读词典。它们是强大的数据结构。

字典上的 Python 文档

真正的蟒蛇词典文章

最新更新