首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有更有效的方法从字典中提取数据?

是否有更有效的方法从字典中提取数据?
EN

Stack Overflow用户
提问于 2022-01-02 13:38:25
回答 1查看 43关注 0票数 0

我有一个调用函数products_api_get_lowest_priced_offers的代码块,它可能返回一个或多个记录。我从这段代码中调用def parse price,它将解析一个记录并返回dict中的字段。我这样做是为了让事情变得更有效率,因为我在一个地方存储了跟踪数据的代码。相反,它给了我代码,我需要两个非常相似的代码块,从字典中提取值(取决于我是否得到了一个或多个记录)。有没有更有效的方法?

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-02 13:48:33

您可以如下所示消除冗余:

代码语言:javascript
复制
    # (...)
    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中放置的元组):

代码语言:javascript
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70556429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档