[英]Python, SUM list of dictionaries by matching key value
我找到了与我想做的类似的解决方案,并且在一定程度上有效。 但是不完全符合我的需要。 感谢您的帮助。
问题:我想为每个 OrderID 及其 TradeVolume 创建一个新列表/字典。 您可以有多个交易,但只有一个 OrderID。 如果一个 OrderID 有多个与之关联的交易,我想对 TradeVolume 求和。
我有一个从 JSON 响应中创建的唯一 orderID 列表:
order_ids = [39663397, 39982478]
修剪用于示例目的。
这是我将要运行的 JSON
trades = [{'TradeNumber': 39784054, 'OrderNumber': 39982478, 'TradeVolume': 1.0}, {'TradeNumber': 39784055, 'OrderNumber': 39982478, 'TradeVolume': 1.0}]
预期结果:
{'OrderNumber': 39982478, 'TotalTradeVolume': 2.0}
当前 output:
{'OrderNumber': 39982478, 'TotalTradeVolume': 1.0},
{'OrderNumber': 39982478, 'TotalTradeVolume': 2.0}
如您所见,在第一次通过时,它按预期添加了它。 但是在第二次通过时,我希望它更新列表中已经存在的值,而不是添加新值。 第二项的总和是正确的。
这是我完成工作的代码片段:
for orderid in order_ids:
sum = 0
for trade in trades:
if orderid == trade['OrderNumber']:
sum = sum + trade['TradeVolume']
if orderid not in total_per_order:
print('not in, adding...')
total_per_order.append({'OrderNumber': orderid, 'TotalTradeVolume': sum})
else:
print('already here, updating...')
total_per_order.update({'TotalTradeVolume': sum})
在调试模式下运行它,似乎永远不会发现 OrderNumber 已经在我创建的新列表中。 很确定这是我的错误所在。
谢谢你的帮助!
这个怎么样:
total_per_order = []
for orderid in order_ids:
total_per_order.append({
'OrderNumber': orderid,
'TotalTradeVolume': sum(t['TradeVolume'] for t in trades if t['OrderNumber'] == orderid)}
结果; total_per_order =
:
[{'OrderNumber': 39663397, 'TotalTradeVolume': 0},
{'OrderNumber': 39982478, 'TotalTradeVolume': 2.0}]
为了解决您的预期结果,您还可以将代码底部的 if 语句提升到更高的级别:
total_per_order = []
for orderid in order_ids:
sum = 0
for trade in trades:
if orderid == trade['OrderNumber']:
sum = sum + trade['TradeVolume']
if orderid not in total_per_order:
print('not in, adding...')
total_per_order.append({'OrderNumber': orderid, 'TotalTradeVolume': sum})
else:
print('already here, updating...')
total_per_order.update({'TotalTradeVolume': sum})
结果:
not in, adding...
[{'OrderNumber': 39982478, 'TotalTradeVolume': 2.0}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.