提问人:carloscarmo173 提问时间:11/28/2022 最后编辑:carloscarmo173 更新时间:11/28/2022 访问量:20
尝试返回存储单元中总数量的函数时出错
Error when trying a function that returns the total quantities in the storage unit
问:
目标是编写一个函数,返回所有存储单元(马德里、巴塞罗那和塞维利亚)的总量,我确实认为最好使用递归来解决这个问题,但我似乎无法解决! 我有这本字典:
Storage = {
"Madrid": [
{"name": "pencil", "quantity": 5},
{"name": "cam", "quantity": 11},
{"name": "powder", "quantity": 51}
],
"Barcelona": {
"Branch 1": [
{"name": "pencil", "quantity": 11},
{"name": "cam", "quantity": 25}
],
"Branch 2": [
{"name": "pencil", "quantity": 17},
{"name": "cam", "quantity": 9}
]
},
"Seville": {
"Branch 1": {
"Sub Branch 1": {
"Sub sub Branch 1": [
{"name": "powder", "quantity": 11}
]
}
},
"Branch 2": [
{"name": "pencil", "quantity": 4}
]
}
}
我搜索并编写了很多代码,这是最有意义的代码
def recursive_sum(n):
current_sum = 0
for key in n:
if not isinstance(n[key], dict):
if not isinstance(n[key], str):
current_sum = current_sum + n[key]
else:
current_sum = current_sum + recursive_sum(n[key])
return current_sum
print(recursive_sum(Storage))
但它返回以下内容:
Traceback (most recent call last):
File "/Users/user/Desktop/pythonProject/main.py", line 85, in <module>
print(recursive_sum(Storage))
File "/Users/user/Desktop/pythonProject/main.py", line 79, in recursive_sum
current_sum = current_sum + n[key]
TypeError: unsupported operand type(s) for +: 'int' and 'list'
我搜索了很多,但我似乎不明白我将如何在字典中获取列表的值,我是不是想错了? 先谢谢你!
答:
0赞
Yip
11/28/2022
#1
当它到达这里时,你的函数会失败
if not isinstance(n[key], str):
current_sum = current_sum + n[key]
n[key] 是:
[{'name': 'pencil', 'quantity': 5}, {'name': 'cam', 'quantity': 11}, {'name': 'powder', 'quantity': 51}]
这可以通过一个简单的循环来解决
def recursive_sum(n):
current_sum = 0
for key in n:
if not isinstance(n[key], dict):
if not isinstance(n[key], str):
for i in n[key]:
current_sum = current_sum + i["quantity"]
else:
current_sum = current_sum + recursive_sum(n[key])
return current_sum
1赞
StephanT
11/28/2022
#2
我看到这里有两件事出了问题:
- 您从不检查类型“list”,您需要对其进行迭代
- 一旦你遍历了列表,你将再次得到字典,你需要在尝试对它们求和之前提取其中的“数量”。
我会以不同的方式处理它:创建一个空的输出字典。然后深入到源代码(大致按照你的方式迭代),并检查当前关卡中是否存在“数量”键。然后检查对应的键是否存在,并将数量添加到结果字典中。
评论