我是新手Python开发者,遇到了以下代码问题。
我想要在Python中按多个键分组,并汇总/平均一个字典列表的值。以下代码(也可以在此处找到前一个问题/响应的位置:按多个键分组并汇总/平均字典列表的值)为我指明了正确的方向,但我在循环中添加更多字段聚合时遇到了问题。
假设我有一个如下所示的字典列表:
input = [
{'msn': '001', 'source': 'foo', 'status': '1', 'qty': 100, 'vol': 100},
{'msn': '001', 'source': 'bar', 'status': '2', 'qty': 200, 'vol': 200},
{'msn': '001', 'source': 'foo', 'status': '1', 'qty': 300, 'vol': 300},
{'msn': '002', 'source': 'baz', 'status': '2', 'qty': 400, 'vol': 100},
{'msn': '002', 'source': 'baz', 'status': '1', 'qty': 500, 'vol': 400},
{'msn': '002', 'source': 'qux', 'status': '1', 'qty': 600, 'vol': 100},
{'msn': '003', 'source': 'foo', 'status': '2', 'qty': 700, 'vol': 200}]
我的代码如下:
for key, grp in groupby(sorted(dict_list, key = grouper), grouper):
temp_dict = dict(zip(["msn", "source"], key))
temp_dict["qty"] = sum(item["qty"] for item in grp)
temp_dict["vol"] = sum(item["vol"] for item in grp)
result.append(temp_dict)
期望的结果是:
{'msn': '001', 'source': 'foo', 'qty': 400, 'vol': 400},
{'msn': '001', 'source': 'bar', 'qty': 200, 'vol': 200},
{'msn': '002', 'source': 'baz', 'qty': 200, 'vol': 500},
{'msn': '003', 'source': 'foo', 'qty': 900, 'vol': 200}]
temp_dict["vol"] = sum(item["vol"] for item in grp)
在for循环中的放置位置无法产生期望的结果,这是我的问题所在。
我要如何在保留代码中的键和分组的同时向列表添加(附加)另一个字段及其计算出的值?
感谢您提前提供任何帮助。