You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从元组列表中获取含最小日期的唯一元组集合?

实现方法

方法一:字典遍历处理(直观易懂)

利用字典键的唯一性,遍历每条交易记录,为每个标的保留日期最早的条目:

transactions = [
    ('GBP.USD', '2022-04-29'),
    ('SNOW', '2022-04-26'),
    ('SHOP', '2022-04-21'),
    ('GBP.USD', '2022-04-27'),
    ('MSFT', '2022-04-11'),
    ('MSFT', '2022-04-21'),
    ('SHOP', '2022-04-25')
]

result_dict = {}
for symbol, date in transactions:
    # 若标的未记录,或当前日期更早,则更新记录
    if symbol not in result_dict or date < result_dict[symbol][1]:
        result_dict[symbol] = (symbol, date)

# 转换为列表得到最终结果
final_result = list(result_dict.values())
print(final_result)

运行输出:

[('GBP.USD', '2022-04-27'), ('SNOW', '2022-04-26'), ('SHOP', '2022-04-21'), ('MSFT', '2022-04-11')]

(Python 3.7+字典会保留插入顺序,若需指定排序,可对final_result额外排序,比如按日期或标的名称)

方法二:itertools.groupby分组处理

用groupby实现更简洁的分组逻辑,但需先按标的排序(groupby仅对连续相同键分组):

from itertools import groupby

# 先按标的名称排序
sorted_trans = sorted(transactions, key=lambda x: x[0])

# 分组后取每组日期最小的元组
final_result = [min(group, key=lambda x: x[1]) for _, group in groupby(sorted_trans, key=lambda x: x[0])]

print(final_result)

输出与方法一一致,可按需调整排序规则。

方法三:pandas处理(适合大数据量)

如果是大规模数据集,用pandas的分组功能效率更高:

import pandas as pd

df = pd.DataFrame(transactions, columns=['symbol', 'date'])
# 按标的分组取最小日期,再转换为元组列表
final_result = df.groupby('symbol')['date'].min().reset_index().apply(tuple, axis=1).tolist()

print(final_result)

输出同样符合需求。


内容的提问来源于stack exchange,提问作者Jason Strimpel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 17:42:12