我有一组类似这样的数据:
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}]
