Actualización de valores de diccionario usando zip () en python
Tengo 4 listas de flotantes que extraje de un archivo JSON. Tengo que modificar los valores en estas 4 listas simultáneamente, dependiendo de la primera lista. Estoy usando zip() para iterar sobre las 4 listas, pero no puedo actualizar los valores en el diccionario original que representa el JSON.
Necesito verificar el signo de un elemento en la primera lista, si es negativo, todos los valores en las 4 listas que tienen el mismo índice que ese elemento deben ponerse a cero. El siguiente fragmento de código contiene algunos datos de muestra:
{
"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"
}
]
}
]
}
Y esto es lo que he probado hasta ahora:
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
Cuando imprimo el JSON, sigo obteniendo los valores negativos originales. El resultado final en el que estoy trabajando es algo como lo siguiente:
{
"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"
}
]
}
]
}
Me gustaría saber cómo actualizar los valores en el propio diccionario. ¿Hay alguna manera de implementar esto aquí?
Mostrar la mejor respuesta