我有呼叫函式的代碼塊,該函式products_api_get_lowest_priced_offers可能回傳單個記錄或多個記錄。從我呼叫的代碼塊中def parse price,它將決議記錄并回傳字典中的欄位。我這樣做是為了通過將遍歷資料的代碼存盤在一個地方來提高效率。相反,它給了我代碼,我需要兩個非常相似的代碼塊來從字典中提取值(取決于我是否得到一個或多個記錄)。有沒有更有效的方法?
def parse_price(sku_multi_sku):
parsed_results=dict();
parsed_results['ASIN'] = sku_multi_sku['Product']['Identifiers']['MarketplaceASIN']['ASIN']['value']
parsed_results['SellerSKU'] = sku_multi_sku['Product']['Identifiers']['SKUIdentifier']['SellerSKU']['value']
return parsed_results
......
......
lowest_offer = products_api.get_lowest_priced_offers_for_sku(marketplace_id, skus)
lowest_offer_dict = lowest_offer.parsed
if type(lowest_offer_dict) is list:
for sku_multi_sku in lowest_offer_dict:
results=parse_price(sku_multi_sku)
ASIN=results['ASIN']. #this block is repeated below
SKU=results['SellerSKU'] #this block is repeated below
single_insert = (ASIN, SellerSKU) #this block is repeated below
full_insert.append(single_insert) #this block is repeated below
else:
results = parse_price(sku_multi_sku)
ASIN = results['ASIN']
SKU = results['SellerSKU']
single_insert = (ASIN, SellerSKU)
full_insert.append(single_insert)
cursor.executemany("INSERT into tbl_update (ASIN, SellerSku) VALUES (%s, %s)", full_insert)
db.commit()
uj5u.com熱心網友回復:
您可以按如下方式消除冗余:
# (...)
lod = lowest_offer_dict
if not isinstance(lod, list):
lod = [lod]
for sku_multi_sku in lod:
results = parse_price(sku_multi_sku)
# ...
或者,您可以創建一個伴隨函式來parse_price回傳元組串列(您當前放置在 中的那些full_insert):
def parse_prices_to_tuples(lod):
if not isinstance(lod, list):
lod = [lod]
tuples = [
(r['ASIN'], r['SellerSKU'])
for sku_multi_sku in lod
for r in [parse_price(sku_multi_sku)]
]
return tuples
# and in your code
full_insert = parse_prices_to_tuples(lowest_offer.parsed)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/402085.html
