簡體   English   中英

Python,通過匹配鍵值求和字典列表

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM