Python加速dict迭代列表

时间:2015-12-20 13:40:42

标签: python list dictionary

我正在努力加快这个列表的创建速度。它需要大约5秒钟,这有点太长了。瓶颈位于底部的变体部分。

产品和变体都是peewee查询,并且是一对多的关系。

如果看起来应该有更好的方法来迭代以找到正确的变体。

data = [{
    'product_id': product.id,
    'title': product.title,
    'price': product.price,
    'variants': [{'product_variant_id': v.id,
                    'colour': v.colour}
                    for v in variants if v.product_id == product.id]
} for product in products]

1 个答案:

答案 0 :(得分:2)

在@ user3760780评论时,创建从产品ID到变体的映射,以避免重复迭代变体:

products = {v.product_id: v for v in variants }

然后,列表理解可以更有效:

data = [{
    'product_id': product.id,
    'title': product.title,
    'price': product.price,
    'variants': [{'product_variant_id': products[product.id].id,
                    'colour': products[product.id].colour}]
} for product in products]