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
No utilice el nombre de argumento "predeterminado". Por ejemplo, si queremos 1.0 como valor predeterminado,
rank = dict.get(key, 1.0)
Para más detalles: TypeError: get () no toma argumentos de palabras clave
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