ur_dir fdp10 dict python json csv dictionary keyerror

python - fdp10 - keyerror ur_dir



Python: teclas dict predeterminadas para evitar KeyError (4)

Bastante nuevo en Python, desarrollador novato, que llama por primera vez

Estoy llamando a algunos JSON y analizando datos relevantes como CSV. No puedo averiguar cómo rellenar el archivo intermedio de json Dict con las teclas predeterminadas, ya que muchas están despobladas. El resultado es un error KeyError cuando intento analizar el contenido en un csv. Me encantaría cualquier consejo!

Gracias.

Actualización: gracias a todos! Ahora estoy recibiendo un error ''Ninguno'' para (fabricante):

import urllib2, json, csv, sys, os, codecs, re from collections import defaultdict output = ''bb.csv'' csv_writer = csv.writer(open(output, ''w'')) header = [''sku'', ''name'', ''description'', ''image'', ''manufacturer'', ''upc'', ''department'', ''class'', ''subclass''] csv_writer.writerow(header) i=1 while i<101: print i bb_url = urllib2.Request("http://api.remix.bestbuy.com/v1/products(sku=*)?show=sku,name,description,image,manufacturer,upc,department,class,subclass&format=json&sort=sku.asc&page=" + str(i) + "&pageSize=100&apiKey=*****************") bb_json = json.load(urllib2.urlopen(bb_url)) print bb_json for product in bb_json[''products'']: row = [] row.append(product[''sku'']) if product[''name'']: row.append(str((product[''name'']).encode(''utf-8''))) else: row.append("") row.append(str(product.get(''description'',""))) row.append(str(product[''image''])+ " ") if product[''name'']: row.append(str(product.get(''manufacturer'',"").encode(''utf-8''))) else: row.append("") row.append(str(product.get(''upc'','''').encode(''utf-8''))) row.append(str((product[''department'']).encode(''utf-8''))) row.append(str((product[''class'']).encode(''utf-8''))) row.append(str((product[''subclass'']).encode(''utf-8''))) csv_writer.writerow(row) i = i+1



Podría usar una sintaxis como esta: product.get("your field", "default value")


Puede usar your_dict.get(key, "default value") lugar de hacer referencia directa a una clave.


Si no puede definir un valor predeterminado y desea hacer otra cosa (o simplemente omitir la entrada):

if key in dict: rank = dict[key] else: # do something or just skip the else block entirely