Python:默认的dict键,以避免KeyError

Ken*_*ous 27 python csv json dictionary keyerror

相当新的python,新手开发人员,第一次来电

我正在调用一些JSON并将相关数据解析为csv.我无法弄清楚如何使用默认密钥填充中间json Dict文件,因为许多都是未填充的.结果是KeyError,因为我试图将内容解析为csv.会喜欢任何建议!

谢谢.

更新:谢谢大家!我现在收到(制造商)的'NoneType'错误:

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
Run Code Online (Sandbox Code Playgroud)

Sta*_*kes 62

您可以使用your_dict.get(key, "default value")而不是直接引用密钥.

  • 默认值为None (2认同)
  • 每当您正常访问密钥时.因此,当你去获取产品的名称而不是`row.append(product ['name'])`时,你会使用`row.append(product.get('name','value name name key key not a') ))` (2认同)
  • 不要使用"None"作为默认值.在您的代码中,如果该值不存在,则将其设置为"""`.所以尝试`row.append(product.get('name',''))`如果它存在,它将追加`name`的值,如果不存在则追加空字符串. (2认同)

Ser*_*ity 8

不要使用"默认"参数名称.例如,如果我们想要1.0作为默认值,

rank = dict.get(key, 1.0)
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息: TypeError:get()不带关键字参数


小智 8

如果您无法定义默认值并想要执行其他操作(或者只是省略该条目):

if key in dict:
    rank = dict[key]
else:
    # do something or just skip the else block entirely
Run Code Online (Sandbox Code Playgroud)