[英]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.