Skip to main content
 首页 » 编程设计

python之根据匹配值合并字典列表

2025年05月04日23JeffreyZhao

我有一组类似这样的数据:

trades =  [{'ORDERID': 123, 'LEAVESQTY': 2200},  
            {'ORDERID': 123, 'LEAVESQTY': 500},  
            {'ORDERID': 456, 'LEAVESQTY': 100},  
            {'ORDERID': 789, 'LEAVESQTY': 300}] 

我正在寻找一种有效的方法来为字典列表中的每个匹配 ORDERID 找到 LEAVESQTY 的最小值。

例如,对于这个例子,我想要的结果是:

output = [{'ORDERID': 123, 'LEAVESQTY': 5000}, 
          {'ORDERID': 456, 'LEAVESQTY': 100}, 
          {'ORDERID': 789, 'LEAVESQTY': 300}] 

我尝试应用与基于匹配键值合并字典的类似问题相同的方法,我只是在基于值合并时遇到了麻烦。

请您参考如下方法:

这是使用 sorted 和 toolz.unique 的一种方法。这个想法是按 LEAVESQTY 排序,然后按 ORDERID 删除重复项。

如果您无权访问 toolz 库,其逻辑与 itertools 文档中的 unique_everseen recipe 相同。

from operator import itemgetter 
from toolz import unique 
 
trades =  [{'ORDERID': 123, 'LEAVESQTY': 2200},  
           {'ORDERID': 123, 'LEAVESQTY': 500},  
           {'ORDERID': 456, 'LEAVESQTY': 100},  
           {'ORDERID': 789, 'LEAVESQTY': 300}] 
 
sorter = sorted(trades, key=itemgetter('LEAVESQTY')) 
res = list(unique(sorter, key=itemgetter('ORDERID'))) 
 
print(res) 
 
[{'LEAVESQTY': 100, 'ORDERID': 456}, 
 {'LEAVESQTY': 300, 'ORDERID': 789}, 
 {'LEAVESQTY': 500, 'ORDERID': 123}]