2014-07-17 124 views
14

相當新的蟒蛇,新手開發者,第一次來電者的Python:默認字典鍵,以避免KeyError異常

我打電話一些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 

回答

32

可以使用your_dict.get(key, "default value")而不是直接引用的關鍵。

+0

感謝您的協助。該行會在for循環之前插入,或者迭代在? – Kenfucious

+2

默認值爲無 –

+2

每當您通常訪問密鑰時。所以當你去獲取產品的名字而不是'row.append(product ['name'])'時,你可以使用'row.append(product.get('name','value if name name key does not exist' ))' –

1

你可以使用語法像這樣:product.get("your field", "default value")

2

如果您不能定義一個默認值,並想做些別的事情(或只是省略項) :

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