如何用Python对JSON中相同sifra的stanje值求和?
问题描述
我有一个在线JSON文件,数据示例如下:
{'skladiste': 1, 'sifra': '7138', 'nc': 0.8, 'vpc': 47.01, 'mpc': 55.0, 'stanje': 5.0, 'aktivan': 255, 'lokacija': '', 'atraktivanod': 0, 'atraktivando': 0} {'skladiste': 2, 'sifra': '7138', 'nc': 0.8, 'vpc': 47.01, 'mpc': 55.0, 'stanje': 2.0, 'aktivan': 255, 'lokacija': '', 'atraktivanod': 0, 'atraktivando': 0}
我需要获取该JSON数据,对整个文件中相同sifra对应的stanje值进行求和。例如,sifra为'7138'的两条数据,stanje分别为5.0和2.0,求和后需生成仅含一条sifra为'7138'、stanje为7.0的新数据。
我已通过以下Python代码获取到JSON数据,但不知如何实现求和操作:
from urllib.request import urlopen import json url = "https://www6.eline.ba/bl/RestWebShop.svc/json/CjenovniciZaWeb/ee6e994652884578830402a297ef3a93/tobyshop" response = urlopen(url) data_json = json.loads(response.read()) print(data_json)
解决方案
可以通过字典分组统计相同sifra的stanje总和,再生成合并后的数据集,具体代码如下:
from urllib.request import urlopen import json url = "https://www6.eline.ba/bl/RestWebShop.svc/json/CjenovniciZaWeb/ee6e994652884578830402a297ef3a93/tobyshop" response = urlopen(url) data_json = json.loads(response.read()) # 用字典存储每个sifra对应的合并后数据 summed_data = {} for item in data_json: sifra = item['sifra'] if sifra not in summed_data: # 首次遇到该sifra,复制字段并初始化stanje总和 summed_item = item.copy() summed_item['stanje'] = item['stanje'] # 可选:移除无意义的skladiste字段 # del summed_item['skladiste'] summed_data[sifra] = summed_item else: # 累加stanje值 summed_data[sifra]['stanje'] += item['stanje'] # 转换为列表形式的最终结果 result = list(summed_data.values()) # 输出结果 for item in result: print(item)
代码说明
- 遍历JSON数据,以
sifra为键构建字典,首次遇到某个sifra时,复制该条数据的字段并初始化stanje值; - 后续遇到相同
sifra的条目时,直接累加其stanje值到对应字典条目; - 最后将字典的值转为列表,得到合并后的结果——每个
sifra仅保留一条数据,stanje为对应所有条目的总和。
如果相同sifra的其他字段存在差异,可根据需求调整字段保留规则(比如取平均值、保留最新值等)。
内容的提问来源于stack exchange,提问作者user16051361
相关产品推荐
相关产品推荐

