有没有办法在 Python 中对 JSON 文件中单个属性的键值求和



所以我有一个包含多个类别和数量属性的 JSON 文件。我需要分别对每个类别的数量求和,但我不确定我能做到这一点(或者我会怎么做(。

这是我到目前为止的代码:

    for key, value in broken_database:
        if value and "quantity" in value.keys():
            sum += value["quantity"]
    print(sum)

它给了我这个错误消息:

ValueError: too many values to unpack (expected 2)

即使它运行了,这段代码也是不够的,因为它只会对所有数量属性求和,我需要按类别求和

我希望这至少可以总结所有内容,以便我可以弄清楚如何区分类别,但到目前为止,我得到的只是错误。

编辑:这是JSON文件的一部分:

[
  {
    "id": 1316334,
    "name": "Refrigerador bottom Freezer Electrolux de 02 Portas Frost Free com 598 Litros",
    "quantity": 12,
    "price": 3880.23,
    "category": "Eletrodomu00e9sticos"
  },
  {
    "id": 1911864,
    "name": "Mouse Gamer Predator cestus 510 Fox Preto",
    "price": 699.0,
    "category": "Acessu00f3rios",
    "quantity": 0
  },

编辑:现在我有这个代码:

import json
with open("broken_database.json", "r+", encoding="utf-8") as file:
    broken_database = json.load(file)
    for key in broken_database:
        estoque = sum(key["quantity"] for key in broken_database)
        print(estoque)
with open("broken_database.json", "w", encoding="utf-8") as file:
    json.dump(broken_database, file, indent=2)
print(broken_database)
它对所有"数量"属性求和,

但不会用"类别"属性分隔总和

JSON 对象的数据结构是一个字典列表,因此您应该在不解压缩键值对的情况下对其进行迭代,而是直接通过键获取quantity的字典值:

sum(d['quantity'] for d in broken_database)

编辑:由于您现在在注释中提到您希望按category属性对总和进行分组,因此您可以将输出改为字典,在以下示例中命名为sums

sums = {}
for d in broken_database:
     sums[d['category']] = sums.get(d['category'], 0) + d['quantity']
我已经

根据您的 JSON 数据更新了代码。似乎broken_database是列表。如果是这种情况,那么您只需要使用 for value in broken_database: 循环遍历列表值。

sum = 0
for value in broken_database:
    if value and "quantity" in value.keys():
        sum += value["quantity"]
    print(sum)

更新:如果要按类别求和,可以将总和存储在字典sum_by_category中:

sum_by_category = {}
for value in broken_database:
    category = value["category"]
    if category not in sum_by_category:
        sum_by_category[category] = 0
    if value and "quantity" in value.keys():
        sum_by_category[category] += value["quantity"]
print(sum_by_category)