【发布时间】:2018-06-21 17:08:02
【问题描述】:
我有以下 dict 结构。
product1 = {'product_tmpl_id': product_id,
'qty':product_uom_qty,
'price':price_unit,
'subtotal':price_subtotal,
'total':price_total,
}
然后是产品列表,列表中的每一项都是上面结构的dict
list_ = [product1,product2,product3,.....]
我需要对列表中的项目求和,按 product_tmpl_id 键分组...我正在使用 dictcollections 但它只对 qty 键求和,我需要对除 product_tmpl_id 之外的键求和,这是标准分组方式
c = defaultdict(float)
for d in list_:
c[d['product_tmpl_id']] += d['qty']
c = [{'product_id': id, 'qty': qty} for id, qty in c.items()]
我知道如何用 for 迭代来做到这一点,但试图寻找一种更 Pythonic 的方式
谢谢
编辑:
需要的是从这里传递:
lst = [
{'Name': 'A', 'qty':100,'price':10},
{'Name': 'A', 'qty':100,'price':10},
{'Name': 'A', 'qty':100,'price':10},
{'Name': 'B', 'qty':100,'price':10},
{'Name': 'C', 'qty':100,'price':10},
{'Name': 'C', 'qty':100,'price':10},
]
到这里
group_lst = [
{'Name': 'A', 'qty':300,'price':30},
{'Name': 'B', 'qty':100,'price':10},
{'Name': 'C', 'qty':200,'price':20},
]
【问题讨论】:
-
它不会再有pythonic了。你的实现很好。
-
您的替代方法是寻找处理此类数据结构的库,例如熊猫。对列求和的代码总体上会更简单、更快。
-
Aran-Fey 我的实现不起作用,因为它只求和,一个键“数量”,我需要求和“数量”、“总计”、“小计”、“单位价格”
标签: python python-2.7 python-collections