【发布时间】:2022-01-03 06:46:16
【问题描述】:
我有 4 个从 JSON 文件中提取的浮点数列表。我必须同时修改这 4 个列表中的值,具体取决于第一个列表。我正在使用 zip() 遍历所有 4 个列表,但我无法更新表示 JSON 的原始字典中的值。
我需要检查第一个列表中元素的符号,如果它是负数,则必须将 4 个列表中与该元素具有相同索引的所有值清零。以下代码 sn -p 包含一些示例数据:
{
"channels": [
{
"name": "TTZAR1e",
"samples": [
{
"data": [0.0996781, 0.0177724, -0.00566106],
"modifiers": [
{"data": [0.084338, 0.0103356, 0.010294], "type": "staterror"},
{"data": {"hi_data": [0.0996781, 0.0177724, -0.00566106], "lo_data": [0.0996781, 0.0177724, -0.00566106]}, "type": "histosys"}
],
"name": "conv"
}
]
}
]
}
这是我迄今为止尝试过的:
import json
file = open("test1.json", 'r')
json_data = json.load(file)
for key, value in json_data.items():
for i in value:
for samp in i.get('samples'):
for mod in samp.get('modifiers'):
hi_list=[]
lo_list=[]
if(mod.get('type') == 'staterror'):
stat_list = mod.get('data')
if(mod.get('type') == 'histosys'):
hi_list = mod.get('data').get('hi_data')
lo_list = mod.get('data').get('lo_data')
for val, val2, val3, val4 in zip(samp.get('data'), hi_list, lo_list, stat_list):
if (val<0):
val,val2,val3,val4 = 0,0,0,0
当我打印 JSON 时,我仍然得到原始的负值。我正在努力的最终输出如下所示:
{
"channels": [
{
"name": "TTZAR1e",
"samples": [
{
"data": [0.0996781, 0.0177724, 0],
"modifiers": [
{"data": [0.084338, 0.0103356, 0],"type": "staterror"},
{"data": {"hi_data": [0.0996781, 0.0177724, 0], "lo_data": [0.0996781, 0.0177724, 0]}, "type": "histosys"}
],
"name": "conv"
}
]
}
]
}
我想知道如何更新字典本身的值。有没有办法在这里实现?
【问题讨论】:
-
我认为你的循环是最好的方法。
-
感谢@U12-Forward :) 我无法将更改传播到 dict 值...我确定我在这里遗漏了一些重要步骤。
标签: python json dictionary zip nested-lists