尝试返回存储单元中总数量的函数时出错

Error when trying a function that returns the total quantities in the storage unit

提问人:carloscarmo173 提问时间:11/28/2022 最后编辑:carloscarmo173 更新时间:11/28/2022 访问量:20

问:

目标是编写一个函数,返回所有存储单元(马德里、巴塞罗那和塞维利亚)的总量,我确实认为最好使用递归来解决这个问题,但我似乎无法解决! 我有这本字典:

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'

我搜索了很多,但我似乎不明白我将如何在字典中获取列表的值,我是不是想错了? 先谢谢你!

Python 列表 字典 嵌套列表

评论


答:

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

我看到这里有两件事出了问题:

  1. 您从不检查类型“list”,您需要对其进行迭代
  2. 一旦你遍历了列表,你将再次得到字典,你需要在尝试对它们求和之前提取其中的“数量”。

我会以不同的方式处理它:创建一个空的输出字典。然后深入到源代码(大致按照你的方式迭代),并检查当前关卡中是否存在“数量”键。然后检查对应的键是否存在,并将数量添加到结果字典中。