我有一个调用函数products_api_get_lowest_priced_offers的代码块,它可能返回一个或多个记录。我从这段代码中调用def parse price,它将解析一个记录并返回dict中的字段。我这样做是为了让事情变得更有效率,因为我在一个地方存储了跟踪数据的代码。相反,它给了我代码,我需要两个非常相似的代码块,从字典中提取值(取决于我是否得到了一个或多个记录)。有没有更有效的方法?
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()发布于 2022-01-02 13:48:33
您可以如下所示消除冗余:
# (...)
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://stackoverflow.com/questions/70556429
复制相似问题