【问题标题】:Python sum data from JSON with same keyPython 对来自具有相同键的 JSON 的数据求和
【发布时间】:2023-01-13 21:38:15
【问题描述】:

我有在线 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 数据,对整个 JSON 文件中的同一个键“sifra”求和“stanje”。有什么帮助吗?

我用这个得到了 JSON 文件数据,但我无法对数据求和

from urllib.request import urlopen
  
# import json
import json
# store the URL in url as 
# parameter for urlopen
url = "https://www6.eline.ba/bl/RestWebShop.svc/json/CjenovniciZaWeb/ee6e994652884578830402a297ef3a93/tobyshop"
  
# store the response of URL
response = urlopen(url)
  
# storing the JSON response 
# from url in data
data_json = json.loads(response.read())

# print the json response
print(data_json)

例如,“sifra”7138 在此数据中与“stanje”5 和 2 重复了 2 次,现在我需要将这两个相加并导出只有一个 ID 7138 和数据为 7 的 stanje 的新数据。

【问题讨论】:

  • 要求不明确。
  • 变量 data_json 包含一个 dict 以及来自 JSON 文件的所有键值对。您可以阅读它们并根据需要添加值。
  • @The6thSense 我从 JSON 获得了数据,但现在我需要遍历整个 JSON 和 SUM 具有相同 ID 的“stanje”数据,在本例中为“sifra”。例如,此数据中有 2 次 sifra 1001,库存数量 (stanje) 为 7 和 8,最后需要此数据的总和为 15,并在新的 JSON 中展开。
  • @The6thSense 我用例子编辑了我的问题。

标签: python arrays json python-3.x


【解决方案1】:

第一步是从 json 中获取项目列表,它位于 key 'cjenovnici' 中:

complete_list = data_json['cjenovnici']

然后您可以过滤列表以仅保留具有您想要的“sifra”的元素:

sifra = '7138'
filtered_list = [item for item in complete_list if item['sifra'] == sifra]

最后你可以sumfiltered_list中元素的“stanje”:

sum(item['stanje'] for item in filtered_list)

或者,如果您愿意,也可以在一行中完成(尽管为了便于阅读,我更喜欢将这些步骤分开):

sum(i['stanje'] for i in [item for item in data_json['cjenovnici'] if item['sifra'] == '7138'])

【讨论】:

  • 正如您在我的代码中看到的那样,我从 URL 获取数据,我仅将此 JSON 数据作为示例。我不需要过滤列表。我得到了我的完整数据,如果您从我的代码中打开链接,您可以看到这些数据,现在我需要对具有相同 ID 的数据求和,并将其导出到新的 JSON 文件或 XLSX 中。
【解决方案2】:

您可以迭代 json 并将它们相加。

代码:

output_dict = {}
dict_list = [{'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}]

for row in dict_list:
    if row.get("sifra"):
        output_dict[row.get("sifra")] = output_dict.get(row.get("sifra"),0) + row.get("stanje", 0)
        
output_dict

输出:

{'7138': 7.0}

【讨论】:

  • 正如您在我的代码中看到的那样,我从 URL 获取数据,我仅将此 JSON 数据作为示例。我得到了我的完整数据,如果您从我的代码中打开链接,您可以看到这些数据,现在我需要对具有相同 ID 的数据求和,并将其导出到新的 JSON 文件或 XLSX 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-23
  • 2021-11-11
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多