所以我有一个包含多个类别和数量属性的 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)