Bucle a través de una lista de diccionarios y agregando a un archivo CSV – error de índice.
Estoy tratando de agregar valores a un archivo csv recorriendo una lista y luego recorriendo los diccionarios de datos json, pero obtengo un error de índice:
import csv
data = json_resp.json()
with open('Meteoritos.csv','w+') as file:
writer = csv.DictWriter(file, fieldnames=['name','id','nametype','recclass','mass','fall','year','reclat','reclong','geolocation'])
writer.writeheader()
for i in range(len(data)):
for x in data[i]:
name = x[1]
id = x[2]
nametype = x[3]
recclass = x[4]
mass = x[5]
fall = x[6]
year = x[7]
reclat = x[8]
reclong = x[9]
geolocation = x[10]
writer.writerow({'name':name,'id':id,'nametype':nametype,'recclass':recclass,'mass':mass,'fall':fall,'year':year,'reclat':reclat,'reclong':reclong,'geolocation':geolocation})
Estoy obteniendo el error en el índice 4
:
---> 12 recclass=x[4]
IndexError: string index out of range
Y aquí hay un ejemplo de datos:
{
'name': 'Abee',
'id': '6',
'nametype': 'Valid',
'recclass': 'EH4',
'mass': '107000',
'fall': 'Fell',
'year': '1952-01-01T00:00:00.000',
'reclat': '54.216670',
'reclong': '-113.000000',
'geolocation': {'latitude': '54.21667', 'longitude': '-113.0'}
}
davy.ai
El problema con este código es que el bucle intenta acceder a los elementos de cada diccionario dentro de la lista utilizando índices, pero los elementos no están en un orden específico. En su lugar, debe acceder a los elementos por sus claves.
Para solucionar el problema, reemplace las líneas dentro del bucle for anidado que establecen las variables por las siguientes:
Al utilizar el método
.get()
, Python devolverá el valor de la clave si existe y, si no, devolveráNone
en lugar de generar un error. Esto permitirá que el bucle continúe ejecutándose incluso si falta una clave en un diccionario.Esto debería solucionar el
IndexError
.